2011-03-02 111 views
0

林葛亭例外需要幫助處理對象使用相同的密鑰

An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key. 

我有一個分離的實體,也有ObjectStateManager關鍵,這就是我不明白。這是可行的嗎?

我試圖做的是當客戶端(Asp MVC控制器)返回時,將實體返回到上下文。

如果我這樣做

db.MyEntity.Attach(myEntity); 

我得到的第一個例外。

我知道它是分離的,因爲當我嘗試調用

db.MyEntity.Context.LoadProperty(myEntity, e => e.myProperty); 

我得到EXCETION我的實體分離(這是應該的,爲什麼在ObjectStateManager的關鍵?)。

因此,總結一下,我認爲我有在ObjectStateManager鍵和分離的實體。我如何附加它?我錯過了什麼?或者我誤解了一些東西?

謝謝你的任何建議。

編輯: 作爲@Ladislav Mrnka正確地說我的問題是我在一個請求處理中加載具有相同ID的實體。我這樣做是因爲我想要比較的實體的原始值,如果有問題我想要顯示回給用戶,但我需要附加它是問題,因爲存在舊值的實體仍然存在於ObjectStateManager中。我附加這個實體,因爲我也需要顯示懶惰加載屬性。什麼是正確的方法來做到這一點?只是爲實體做出新的查詢?

+1

您是否爲每個請求處理創建新的上下文?你只打一次附件嗎?你是否在相同的請求處理中加載了具有相同ID的實體? – 2011-03-02 12:54:38

+0

我爲每個請求創建新的上下文。我只附加一次,但你是正確的,我負載同一個ID相同的請求實體! (這可能是問題!) – Eduard 2011-03-02 12:58:54

回答

2

您不能使用相同的Id加載實體並附加實體。您必須分離已加載的文件或將更改合併到已加載的文件中(也請檢查ApplyCurrentValues方法)。