2012-02-21 267 views
2

我想附加和断开的实体添加到实体框架上下文。例如:实体框架4.0附加对象图

我有一个客户实体和导航属性详细订单实体。这个想法是获得客户实体并对实体进行修改,然后将新实体实体实体添加到实体实体。

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

"An object with a temporary EntityKey value cannot be attached to an object context."

我明白,错误是因为添加订单实体,应该是新增,而不是的。

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

+0

在Codeplex上有一段时间可以更好地重新连接断开的实体图。建议访问它,如果您同意为此功能添加您的声音。 https://entityframework.codeplex.com/workitem/864 – 2014-03-18 09:23:21

回答

0

经过一番研究,我发现了一个变通针对此问题:

不是attacthing的客户对象回到方面,我现在客户对象添加到上下文,然后更改的状态反对修改

我到客户对象复制到一个新的客户对象摆脱的EntityKey的(你不能添加一个对象具有的EntityKey,你必须附加它),然后添加新客户对象使用AddObject方法。

这有点丑,但它的作品。我有任何其他建议吗?

2

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

+0

谢谢Ladislav,我考虑使用EF的POCO(Code-First)。看起来似乎是一种可行的方式,因为它给你更多的控制力和灵活性。尽管4.3中有一个错误,我将不得不等待这个服务包。我找到了解决这个问题的方法,我将在下面发布。 – 2012-02-23 08:37:27

+0

您好@Ladislav Mrnka您上面的评论对于Code First来说依然如此吗? – 2013-05-19 01:14:15