没有首先获得实体的EF4更新实体
如何更新实体而无需拨打电话进行选择。 如果我为实体提供密钥,那么在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();
您可以通过添加实体并将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的条目并更新它而不是向数据库添加新条目。
你是不是必须选择它才能获得要编辑的数据? 如果你对它进行缓存,那么在保存它时不会再花费任何费用。