2012-02-21 151 views
2

我想附加和斷開的實體添加到實體框架上下文。例如:實體框架4.0附加對象圖

我有一個客戶實體和導航屬性詳細訂單實體。這個想法是獲得客戶實體並對實體進行修改,然後將新實體實體實體添加到實體實體。

當我嘗試附加(我認爲這是正確的使用方法)客戶實體時,問題開始。因爲整個對象圖現在正在連接我得到以下錯誤:

"An object with a temporary EntityKey value cannot be attached to an object context."

我明白,錯誤是因爲添加訂單實體,應該是新增,而不是的。

有沒有辦法將新的子實體的現有實體附加或添加到上下文中?

+0

在Codeplex上有一段時間可以更好地重新連接斷開的實體圖。建議訪問它,如果您同意爲此功能添加您的聲音。 https://entityframework.codeplex.com/workitem/864 – 2014-03-18 09:23:21

回答

0

經過一番研究,我發現了一個變通針對此問題:

不是attacthing的客戶對象回到方面,我現在客戶對象添加到上下文,然後更改的狀態反對修改

我到客戶對象複製到一個新的客戶對象擺脫的EntityKey的(你不能添加一個對象具有的EntityKey,你必須附加它),然後添加新客戶對象使用AddObject方法。

這有點醜,但它的作品。我有任何其他建議嗎?

2

如果你想使用Attach這種方式,你不應該使用基於EntityObject的實體 - 而是使用POCO。無論如何,你仍然需要遍歷整個對象圖,併爲每個實體和獨立關聯設置正確的狀態(修改,添加,刪除)。即使在使用POCO的情況下,最後的方法attaching detached object graph is very hard - 最好的方法是不附加圖形,而是從數據庫加載相同的數據並將加載的圖形同步分離的圖形(必須自己編碼)。

+0

謝謝Ladislav,我考慮使用EF的POCO(Code-First)。看起來似乎是一種可行的方式,因爲它給你更多的控制力和靈活性。儘管4.3中有一個錯誤,我將不得不等待這個服務包。我找到了解決這個問題的方法,我將在下面發佈。 – 2012-02-23 08:37:27

+0

您好@Ladislav Mrnka您上面的評論對於Code First來說依然如此嗎? – 2013-05-19 01:14:15