如何更新实体而无需拨打电话进行选择。如果我为实体提供密钥,那么在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();
提前致谢。
编辑: 而且,重要的是 只要 更改的受影响属性将更新。这可能吗?
也许以下代码工作正常。
var user = new User();
user.Id = 2;
context.Users.Attach(user);
user.Username = "user.name";
user.Name = "ABC 123";
context.SaveChanges();
也许以下代码工作正常。
var user = new User();
user.Id = 2;
context.Users.Attach(user);
user.Username = "user.name";
user.Name = "ABC 123";
context.SaveChanges();
您可以通过添加实体并将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的条目并更新它而不是向数据库添加新条目。
你是不是必须选择它才能获得要编辑的数据?
如果你对它进行缓存,那么在保存它时不会再花费任何费用。