没有首先获得实体的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的条目并更新它而不是向数据库添加新条目。

你是不是必须选择它才能获得要编辑的数据? 如果你对它进行缓存,那么在保存它时不会再花费任何费用。