2011-02-25 124 views
2

您好我正在尝试克隆一个EF实体,然后将其重新插入上下文中作为新行保存回数据库。后来,当我解决了这个问题时,我想扩展它以克隆一个完整的实体图并保存它。实体框架4 - 难以理解克隆实体的工作原理

我已经尝试了两个代码示例:

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

这两者似乎工作。我认为问题是我对发生的事情的理解。据我了解,克隆过程使目标对象的分离克隆,我应该能够将Attach或AddObject返回到上下文,并将上下文保存到数据库,在数据库中将自动分配唯一的PK ID 。

令我困惑的是,当我克隆我的实体对象,然后在调试模式下查看克隆的属性时,似乎它的导航集合仍显然指向复制对象指向的有效实体。但EntityState是独立的。这是正常的吗?我认为克隆对象的导航属性指向与克隆对象图形中相同的对象。但是克隆对象是'独立'的,克隆的对象是'未更改'。

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

+0

为何深度克隆? http://www.codeproject.com/Tips/474296/Clone-an-Entity-in-Entity-Framework-4 – markmnl 2012-11-23 00:13:50

回答

2

深拷贝(整个对象图的克隆)必须导致两个等价的对象图。原始图形仍将附加到上下文。第二个图将从对象上下文中分离出来。根据克隆过程的深度,图形之间不会有交叉引用。这意味着如果你真的克隆了一切,你的第二个图中的导航属性将永远不会指向附加的实体(来自原始图)。

+0

感谢您的答复。这就是我的想法,但如果我克隆一个单一的对象,那不会自动克隆引用的对象吗?因为这似乎是发生了什么,否则我不能解释克隆对象的被引用对象是如何“不变”,而克隆是“分离”的。这似乎暗示他们不是同一个对象,即使我没有克隆孩子。 – TripleAntigen 2011-02-25 06:29:28