2012-09-07 41 views
1

當從脫離實體更新一排,我試圖避免更新未更改的字段,使用此:避免更新非可空場

DbEntityEntry<Type> entry = context.Entry(entity); 
entry.Property(p => p.Property).IsModified = false; 

也能正常工作可爲空字段,但是當這是一個不可空字段EF會引發一個驗證異常,說明該字段是必需的。

任何人都有任何洞察,爲什麼這不起作用,如果我必須擺弄原始值來克服它?
我正在使用EF 5.0和DBContext-API。

+0

我加入EF5和.NET 4.5的標籤,因爲設置'IsModified'爲false時,不可能在.NET 4.0 –

回答

2

原因是EF內部的驗證邏輯。驗證總是在整個實體上觸發 - 它並不尊重修改。解決的辦法是在EF禁用實體驗證邏輯:

context.Configuration.ValidateOnSaveEnabled = false; 
+1

好吧,至少一個可行的解決辦法,但它讓我覺得有點危險。除了驗證不可空字段之外,我還會失去什麼? – Robert

+0

您將失去整個驗證,但如果您只想更新實體的一部分,則無法使用它。驗證要求您使用由有效數據填充的整個實體。 –