C# 如何使用POCO和自定义ObjectContext正确更新EF4中的实体?

C# 如何使用POCO和自定义ObjectContext正确更新EF4中的实体?,c#,entity-framework-4,C#,Entity Framework 4,使用所描述的技术,我创建了一个简单的POCO EF4模型并开始运行。保存新对象和删除对象非常简单(分别使用AddObject()和DeleteObject())。但我发现更新对象的唯一方法是检索对象的存储版本,并使用保存的对象中的新值手动更新其属性。肯定有更好的办法吗 我的ObjectContext已断开连接-换句话说,我为模型上的每个操作使用一个新的ObjectContext实例 谢谢。使用存根技术: 如果该实体已经在图中,您将得到一个OSM异常(具有键的实体已经存在) 我通过首先检查对象是否

使用所描述的技术,我创建了一个简单的POCO EF4模型并开始运行。保存新对象和删除对象非常简单(分别使用
AddObject()
DeleteObject()
)。但我发现更新对象的唯一方法是检索对象的存储版本,并使用保存的对象中的新值手动更新其属性。肯定有更好的办法吗

我的
ObjectContext
已断开连接-换句话说,我为模型上的每个操作使用一个新的
ObjectContext
实例

谢谢。

使用存根技术:

如果该实体已经在图中,您将得到一个OSM异常(具有键的实体已经存在)

我通过首先检查对象是否存在于图形中(TryGetObjectStateEntry),然后仅在不存在时附加来抵消这一点。

使用存根技术:

如果该实体已经在图中,您将得到一个OSM异常(具有键的实体已经存在)


我首先检查对象是否存在于图中(TryGetObjectStateEntry),然后仅在不存在时附加对象,以此来抵消这种情况。

谢谢,看起来不错。您的意思是“如果存根已经在图形中”,还是
顺序o
已经在图形中。模型上的每个实体都有一个唯一标识它的“EntityKey”,就像“OrderID”一样。如果此实体已在图形中(通过previous.Attach或从查询中检索),并且具有相同的实体键,则它将引发异常。如果你说你每次都在OC上更新,这不应该是个问题(尽管你没有提到这是不是一个web应用程序/windows/etc),这是MVC,而且它似乎更新得很好,没有使用你的技术抛出EMs。顺便问一下,你知道什么好的EF书籍或资源吗?你似乎知道你的东西……)呵呵,是的,我做得很好-我只是一个快速的学习者,只在英孚工作了几个月。强烈推荐朱莉娅·勒曼的书-。这是你唯一需要的关于EF的书。她很厉害。谢谢,看起来不错。您的意思是“如果存根已经在图形中”,还是
顺序o
已经在图形中。模型上的每个实体都有一个唯一标识它的“EntityKey”,就像“OrderID”一样。如果此实体已在图形中(通过previous.Attach或从查询中检索),并且具有相同的实体键,则它将引发异常。如果你说你每次都在OC上更新,这不应该是个问题(尽管你没有提到这是不是一个web应用程序/windows/etc),这是MVC,而且它似乎更新得很好,没有使用你的技术抛出EMs。顺便问一下,你知道什么好的EF书籍或资源吗?你似乎知道你的东西……)呵呵,是的,我做得很好-我只是一个快速的学习者,只在英孚工作了几个月。强烈推荐朱莉娅·勒曼的书-。这是你唯一需要的关于EF的书。她摇滚。
public void UpdateOrder(Order o)
{
   var stub = new Order { Id = o.OrderId }; // create stub with EntityKey
   ctx.Orders.Attach(stub); // attach stub to graph
   ctx.ApplyCurrentValues("Orders", o); // override stub with values.
   ctx.SaveChanges();
}