2011-05-24 118 views
8

有誰知道我們是否可以在實體框架4.1代碼優先的情況下排除列更新?例如,我有'CreatedOn'字段,我不想在編輯/更新時添加。這是可能的,即有選擇地排除EF Code First 4.1中更新操作的字段?從實體框架4.1中更新排除列代碼優先

+0

你最終如何解決這個問題?答案只提供建議。 – 2011-05-31 22:18:45

回答

15

如果您使用的是附加實體,則EF只會爲已更改的字段生成更新。如果您正在使用分離的實體,則必須手動說出EF發生了什麼變化。如果你這樣稱呼:

context.Entry(yourEntity).State = EntityState.Modified; 

你是在說EF所有的屬性都應該被修改。但是,如果你不是叫這個:

context.Entry(youreEntity).Property(e => e.SomeProperty).IsModified = true; 

你會說,只有SomeProperty被修改(僅此屬性將在更新)。我不確定是否可以通過將整個實體標記爲已修改並選擇不應該修改的屬性來進行反向操作,但是您可以自行測試。

如果您的數據庫中填寫了您的CreatedOn,您可以將其標記爲DatabaseGeneratedOption.Identity,它將永遠不會被您的應用程序修改。

+0

有沒有辦法從select中排除列?我有一個'User'實體,並且我希望按需要選擇'Password:varbinary(32)'列,這可能嗎? – Shimmy 2012-02-07 01:43:36

+2

反向操作也起作用(至少在我測試過的EF5中)。這意味着您可以先調用'context.Entry(yourEntity).State = EntityState.Modified',然後調用'context.Entry(youreEntity).Property(e => e.SomeProperty).IsModified = false'來更新所有除了手動排除的列以外的列。 – 2013-02-28 13:49:57

+0

@FlorinDumitrescu:是的,這在EF5中使用.NET 4.5,但不使用.NET 4.0。 – 2013-02-28 14:16:21

相關問題