2011-03-20 148 views
3

我一直在更新我的實體框架只需右鍵單擊並點擊「從數據庫更新模型」。我通常會在「添加」選項卡下進行操作,然後單擊表格並單擊完成。我也有時使用「刷新」。這些有什麼區別?當我刷新或添加有時實體出錯或將一些舊信息保存在緩存中時,我怎麼才能讓實體匹配我的數據庫並清除任何舊的緩存事物。如何更新我的實體框架

+1

我不知道刷新是什麼;它似乎沒有刷新任何東西!我總是刪除實體,然後使用添加選項。 – 2011-03-20 02:02:46

回答

3

它不會清除舊的項目。你必須自己刪除這些。從積極的方面來看,Visual Studio在編譯時會給你一個錯誤,說明一個或兩個未被映射的錯誤。實體框架工具更多的是代碼生成器。它根據數據庫的結構生成類,而不是綁定到數據庫以獲取結構信息。

5

是的,你是對的。設計人員有點bug,並且不能很好地處理某些模式更改。通常,當我將數據表添加到數據庫時,我運行Update model from database並在Add選項卡中選擇表。工作正常。如果我添加一個字段到現有的表,我做Update modelRefresh。工作得很好。

但是,如果我添加一個字段並刪除另一個字段,或重命名一個現有的字段(據我所知),EF不能正確處理這個字段(添加一個新字段,但未能刪除舊字段,其中一個未映射,模型驗證失敗)。所以在那些更復雜的情況下,我通常會刪除實體,然後再次執行Update model from databaseAdd

缺點是,如果您確實進行了一些更改(例如重命名實體的某些字段或導航屬性),則必須再次進行這些更改。

1

設計人員並沒有問題,它不處理某些更改的原因是因爲CSDL和用戶所做的某些MSL修改不會被覆蓋。 CSDL是您在設計器中看到的圖表,MSL是您的實體和關聯的映射。

相信我,這是比沒有更新存在的Linq-to-sql向前邁出的一大步,當你想刷新你的模型時,你總是必須刪除所有變更。如果你做了很多修改,你也可以在EF設計器中刪除你的實體。 EF設計師提供了更新或重新創建(通過刪除舊的)的選擇。

+0

'「設計器不是bug,它不處理某些更改的原因是因爲CSDL和用戶創建的一些MSL修改不會被覆蓋」'在運行更新模型時會導致*特性*(不是bug!)從數據庫;) – Yakimych 2011-03-20 16:59:57

+0

它是越野車,取決於你正在使用VS的版本。有時它不處理表關聯和其他一些東西。 – 2013-12-15 12:28:51