没有首先获得实体的EF4更新实体

时间:2010-07-08 13:23:30

标签: c# entity-framework entity-framework-4

如何更新实体而无需拨打电话来选择它。如果我为实体提供密钥,那么在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();

提前致谢。

编辑此外,重要的是更新受影响的属性。这可能吗?

3 个答案:

答案 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)

无论如何都不必选择它来获取要编辑的数据吗? 如果你对它进行缓存,那么保存它时不会再花费任何费用。