2010-05-09 98 views
0

我正在使用EF4,當我嘗試對我執行某些看起來很瑣碎的操作時遇到問題。將現有實體添加到不同實體的導航屬性

我有兩個實體,我們稱它們爲A和B.這些實體之間有一個多對多的關聯,並且A上的導航屬性包含一個相關的B實體列表。

我想要做的是將現有的B實體添加到新的A實體。當我嘗試這樣做,我得到一個異常:

的AcceptChanges不能繼續 在 ObjectStateManager另一個對象,因爲 對象的鍵值衝突。在致電 AcceptChanges之前,請確保 鍵值是唯一的。

有沒有人遇到過這樣的問題?

更多信息,可能是相關的:

  • 我從模型創建的數據庫。
  • 我有一個基本實體,A和B實體都從中繼承。

更新:找到了解決方案 - 脫離被鏈接的實體,它重新連接到上下文,然後一切按計劃進行。

+0

你讀過這個嗎? http://stackoverflow.com/questions/1008582/invalidoperationexception-when-calling-savechanges-in-net-entity-framework 雙重檢查PK和ID道具配置是否正確? – 2010-05-09 15:17:12

+0

現在檢查。一切看起來不錯... – 2010-05-09 15:35:04

+0

可能與此有關: - http://stackoverflow.com/questions/2777034/complex-entity-framework-linked-graphs-issue-how-to-limit-change-set-break- – 2010-05-09 21:53:43

回答

0

今天我有類似的問題。在我的情況下,我的表是一個視圖,我爲InsertFunction添加了一個存儲過程。麻煩的是,我沒有配合我的存儲過程的結果綁定。症狀是我可以添加單個實體,但在添加多個實體時遇到「鍵值衝突」異常。

一旦我使存儲過程返回新的ID(鍵),然後配置EF的結果一切都很好。

存儲過程的末尾添加這樣的事情:

select SCOPE_IDENTITY() as NewWidgetId 

在EF配置設置結果綁定:

NewWidgetId -> WidgetId : <widget's type> 

我發現這個網站有幫助:Using Stored Procedures for Insert, Update & Delete in an Entity Data Model

希望這可以幫助

Rob Smyth