如何更新实体而无需拨打电话来选择它。如果我为实体提供密钥,那么在ObjectContext上调用SaveChanges()之后,它是否应该知道更新。
我目前这样做:
var user = context.Users.Single(u => u.Id == 2);
user.Username = "user.name";
user.Name = "ABC 123";
context.SaveChanges();
这有效,但强制选择。因为我知道Id
,为什么我不能这样做:
var user = new User();
user.Id = 2;
user.Username = "user.name";
user.Name = "ABC 123";
context.UpdateObject(user);
context.SaveChanges();
提前致谢。
编辑此外,重要的是仅更新受影响的属性。这可能吗?
答案 0 :(得分:12)
也许以下代码工作正常。
var user = new User();
user.Id = 2;
context.Users.Attach(user);
user.Username = "user.name";
user.Name = "ABC 123";
context.SaveChanges();
答案 1 :(得分:4)
您可以通过添加实体并将EntityState更改为Modified来以某种人为的方式执行此操作:
var user = new User();
user.Id = 2;
user.Username = "user.name";
user.Name = "ABC 123";
context.AddToUsers(user);
ObjectStateEntry userEntry = context.ObjectStateManager.GetObjectStateEntry(user);
userEntry.ChangeState(EntityState.Modified);
context.SaveChanges();
通过这种方式,您将告诉ObjectContext查找Id = 2的条目并更新它而不是向数据库添加新条目。
答案 2 :(得分:-1)
无论如何都不必选择它来获取要编辑的数据吗? 如果你对它进行缓存,那么保存它时不会再花费任何费用。