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

时间:2010-12-20 21:08:30

标签: c# entity-framework-4

使用描述的技术here我启动并运行了一个简单的POCO EF4模型。保存新内容和删除很简单(分别使用AddObject()DeleteObject())。但是,更新对象的唯一方法是检索对象的存储版本,并使用保存对象中的新值手动更新其属性。当然有更好的方法吗?

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

感谢。

1 个答案:

答案 0 :(得分:4)

使用存根技术

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();
}

如果实体已经在图表中,您将获得OSM异常(具有密钥的实体已存在)。

我通过首先检查对象是否存在于图形中来尝试这一点(TryGetObjectStateEntry),如果不存在则仅附加。