2011-12-06 82 views

回答

1

自我跟蹤實體是序列化的,因此最簡單的方式來獲得該實體的深克隆(深克隆=圖表的克隆)是使用DataContractSerializer和序列化和反序列化立即它。反序列化的實體將成爲您圖的克隆。

+0

我可能是錯的,但我相信這將開始從數據庫中提取數據,而不是限制的數據給你明確質疑,因爲它會按照無限制的方式所有的導航性能。無論你喜不喜歡,你都會得到整個對象圖。 –

+1

@Merlyn:這對於真正的STE不會發生,因爲它們不支持惰性編碼來避免這個問題。有了POCO,您必須關閉代理創建才能完成這項工作。基於EntityObject的實體也支持開箱即用,因爲它們是以序列化的方式生成的。 –

+0

「真實」是什麼意思?就像「真正的男人不使用這個特徵」,或者它可能是一種毫無價值/有害的特徵?或者是其他東西?你能提供一個參考嗎?沒有挑戰你,我在這裏學習:) –

0

當你說「克隆」,你的意思是創建一個可持久的,或者只是創建另一個「瞬時」實體是同一實體的內存拷貝一個新的實體?

如果你想在內存中的副本,您可以隨時創建實體類的新實例,並複製領域。對它的更改將不會被跟蹤,因爲您沒有告知關於它的上下文。

var newInstance = new SomeEntity() { SomeProperty = oldInstance.SomeProperty }; 

如果您想要創建一個新的實體將被持久化,那麼只需執行正常操作即可插入新記錄。例如: -

context.SomeEntities.Add(newInstance); 

你不能在邏輯上進行整體拷貝,跟蹤變化,但指的是相同的實例。你會選擇哪個版本的對象?

+0

我想堅持深層克隆不僅僅是在內存中複製 – user440916

+0

@ user440916:然後看看我提供的代碼的第二位,它將內存中的副本作爲數據庫中的另一個條目存在。 –