如何更新記錄的單個屬性而不先檢索它? 我問在EF代碼第一次4.1在實體框架中更新記錄的單個屬性代碼優先
的情況下說我有一類用戶,映射到表中的用戶數據庫:
class User
{
public int Id {get;set;}
[Required]
public string Name {get;set;}
public DateTime LastActivity {get;set;}
...
}
現在我想更新用戶的LastActivity。我有用戶ID。我可以通過查詢用戶記錄,將新值設置爲LastActivity,然後調用SaveChanges()來輕鬆完成此操作。但是這會導致冗餘查詢。
我使用Attach方法解決問題。但是,因爲EF在Name上引發驗證異常(如果它爲null),我將Name設置爲隨機字符串(不會更新回DB)。但是,這似乎並沒有一個完美的解決方案:
using (var entities = new MyEntities())
{
User u = new User {Id = id, Name="this wont be updated" };
entities.Users.Attach(u);
u.LastActivity = DateTime.Now;
entities.SaveChanges();
}
我將非常如果並欣賞有人可以給我提供一個更好的解決方案。並且原諒我的任何錯誤,因爲這是我第一次提出關於SO的問題。
我正在尋找一種方法來禁用驗證保存,但無法執行。感謝您的解決方案。 – 2011-04-07 04:07:40
這個問題_seems_要在EF 5中修復。 – 2013-09-29 07:31:29
我想指出的是,併發檢查可能會導致「0行更新」異常,因爲它將在where子句中添加一個檢查來匹配rowversion列。 (在我的情況下,它是空的,因爲它是一個存根) – Slight 2015-04-20 17:43:49