我正在尝试将断开连接的实体附加到实体框架上下文中。例如:
我有一个 Customer 实体和一个导航属性来详细说明 Order 实体。我们的想法是获取 Customer 实体并对实体进行修改,然后将新的 Order 实体添加到 Customer 实体。
当我尝试附加(我认为这是正确使用的方法。)时,问题就开始了。客户实体。因为现在附加了整个对象图,我收到以下错误:
“具有临时EntityKey值的对象无法附加到对象上下文。”
我了解错误是因为添加了订单实体应已添加而非已附加。
有没有办法将带有新子实体的现有实体附加或添加到上下文?
答案 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上找到。