实体框架4.0附加对象图

时间:2012-02-21 09:13:42

标签: asp.net sql-server-2008 c#-4.0 entity-framework-4

我正在尝试将断开连接的实体附加到实体框架上下文中。例如:

我有一个 Customer 实体和一个导航属性来详细说明 Order 实体。我们的想法是获取 Customer 实体并对实体进行修改,然后将新的 Order 实体添加到 Customer 实体。

当我尝试附加(我认为这是正确使用的方法。)时,问题就开始了。客户实体。因为现在附加了整个对象图,我收到以下错误:

  

“具有临时EntityKey值的对象无法附加到对象上下文。”

我了解错误是因为添加了订单实体应已添加而非已附加

有没有办法将带有新子实体的现有实体附加或添加到上下文?

3 个答案:

答案 0 :(得分:2)

如果您想以这种方式使用Attach,则不应使用基于EntityObject的实体 - 请改用POCO。无论如何,您仍然必须遍历整个对象图并将正确的状态(修改,添加,删除)设置为每个实体和独立关联。即使使用POCO,在attaching detached object graph is very hard结束时 - 最好的方法是不附加图形,而是从数据库加载相同的数据,并使用加载的图形同步分离的图形(您必须自己编写代码)。

答案 1 :(得分:0)

经过一些研究后,我找到了解决这个问题的方法:

而不是将 Customer 对象恢复到上下文我现在将 Customer 对象添加到上下文中,然后将对象的状态更改为 Modified < / em>的

我必须将 Customer 对象复制到新的 Customer 对象中以摆脱EntityKey(您无法添加具有EntityKey的对象,您必须< strong>附加,然后使用 AddObject 方法将新的 Customer 对象添加到上下文中。

它有点难看,但它有效。我愿意接受任何其他建议吗?

答案 2 :(得分:0)

您描述的问题也是我在CodeProject上的文章的主题: Reattaching Entity Graphs with the Entity Framework

请注意,最新代码可在ef4tiers.codeplex.com上找到。