实体框架4 - 难以理解克隆实体的工作原理

时间:2011-02-25 06:06:44

标签: object entity-framework-4 entity clone

您好我正在尝试复制EF实体,然后将其重新插入上下文,以便将数据库另存为新行。后来当我解决了这个问题时,我想扩展它以克隆一个完整的实体图并保存它。

我尝试了两个代码示例:

http://msmvps.com/blogs/matthieu/archive/2008/05/31/entity-cloner.aspx

http://social.msdn.microsoft.com/forums/en-US/adodotnetentityframework/thread/a967b44b-c85c-4afd-a499-f6ff604e2139

这两个似乎都有效。我认为问题在于我对正在发生的事情的理解。根据我的理解,克隆进程生成目标对象的分离克隆,我应该能够将其附加或AddObject返回到上下文,并将上下文保存到DB,在DB中将自动分配一个唯一的PK ID

让我感到困惑的主要事情是,当我克隆我的实体对象然后在调试模式下查看克隆的属性时,似乎它的导航集合显然仍指向复制对象指向的有效实体。但是EntityState是Detached。这是正常的吗?我假设克隆对象的导航属性指向与克隆对象图中相同的对象。但克隆对象是“已分离”,克隆对象是“未更改”。

我很困惑......任何想法?

1 个答案:

答案 0 :(得分:2)

深层复制(整个对象图的克隆)必须产生两个等效的对象图。原始图表仍将附加到上下文中。第二个图将与对象上下文分离。根据克隆过程的深度,图之间不会有交叉引用。这意味着如果您真的克隆了所有内容,那么您在sencond图形中的导航属性将永远不会指向附加实体(来自原始图形)。