如何更新记录的单个属性而不先检索它? 我问在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