2011-02-25 34 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