2012-03-30 52 views
1

我現在使用實體框架4.3 DbContext來生成數據庫實體,我的問題是當我更改數據庫時,如何確保自動生成的代碼被更新? EF用於存儲數據庫規則的位置,如允許從否爲「是」爲空。當我使用從數據庫更新模型函數.EDMX文件時,它似乎不更新表的允許null規則。我如何解決數據庫更改問題。代碼隱藏在哪裏以存儲所有這些規則。帶有數據庫更改的DbContext

錯誤消息:

Validation failed for one or more entities. See 'EntityValidationErrors' property for more details. 

但是,當我刪除所有EF自動生成的文件,並重新生成它,它似乎規則進行更新。但我認爲在開發期間解決問題並不是一個好方法。

+0

如果您只更改幾張表格,您可以從EF設計中刪除這些表格並重新添加它們。我發現EF更新不可靠。仍然似乎是錯誤的做法... – kaj 2012-03-30 05:38:01

回答

1

當我使用.EDMX文件中的數據庫更新模型函數時,它似乎不會更新表的允許空值規則。

這是正確的行爲。 EDMX文件有三個部分:

  • 數據庫定義(僅在模型瀏覽器中查看)
  • 類定義(這是你的設計師看到)
  • 定義(之間的映射那是你在映射的詳細信息請參見)

當您使用從數據庫更新時,設計器將完全替代數據庫定義並向映射和類定義添加新的表或列。它永遠不會嘗試刪除或更改任何內容。原因是類定義是可定製的。如果您進行更改,則不希望設計師觸摸它們。從數據庫更新只有實際狀態 - 它不知道你做了哪些更改,哪些更改是由修改數據庫引起的,因此它只是使用更好的方式 - 不要修改任何內容並讓你糾正不一致之處。

+0

感謝您的精彩解釋,所以對於我的情況,是「刪除和添加」的唯一方法來解決在EF 4.3允許空變更? – Timeless 2012-03-30 10:25:57

+0

不可以。您也可以根據對數據庫所做的更改來修改您的屬性配置。 – 2012-03-30 10:44:43

+0

嗨,EF會檢索所有的領域,即使我不需要它?例如:var name = context.UserAccount.SingleOrDefault(u => u.LoginEmail ==「[email protected]」)。FirstName; //我只想獲取電子郵件地址等於[email protected]的用戶名稱。這是正確的行爲?處理大數據時的性能如何?任何替代方法?非常感謝 ! – Timeless 2012-04-27 15:38:47