如何在不先检索记录的情况下更新单个属性?我是在EF Code First 4.1环境中提问的。
假设我有一个映射到数据库Users表的User类:
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为空会抛出验证异常,所以我将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上提问,请原谅任何错误。
User u = new User {Email = "abcd@123.com", LastActivity = DateTime.Now };
在这里,Email == "abcd@123.com" 可以唯一地标识一个实体。 - dan