2011-02-02 88 views
2

我在WCF上使用實體框架和自我跟蹤實體。實體是否可以從實體框架的ObjectStateManager中卸載?

我有2個實體,客戶和PriceMatrix具有許多一對多關係(該客戶可以有許多歷史價格矩陣,和矩陣可以一組客戶之間被共享)

客戶端具有一個單個PriceMatrix,它會更新併發送回服務器。服務器需要檢查此PriceMatrix是否在其他客戶之間共享,然後再選擇更新它,或複製它並更新副本。

我遇到的問題是因爲我在加載PriceMatrix來檢查它,然後再附加更新的PriceMatrix,我在調用ApplyChanges()時出現以下錯誤。

「AcceptChanges無法繼續,因爲對象的鍵值與ObjectStateManager中的另一個對象發生衝突。請在調用AcceptChanges之前確保鍵值是唯一的。

如果我註釋掉我的支票(因此不加載PriceMatrix),一切正常。

我真正想要做的是在檢查其狀態後,卸載PriceMatrix,然後附加從客戶端接收到的更新後的PriceMatrix。

回答

2

在這種情況下,請嘗試使用ObjectContextDetach方法。在STE中這是known issue - AcceptChanges要求具有相同密鑰的STE先前未加載到上下文中。