我在更新ASP.NET應用程序中斷開連接的POCO模型時遇到問題。如何處理斷開的對象圖中的重複項?
比方說我們有以下模型:
- 用戶
- 區
- 訂單
用戶可以負責0以上的地區,訂單屬於區並且用戶可以是訂單的所有者。
當用戶登錄用戶並加載相關區域時。稍後用戶加載訂單,並將自己設置爲訂單的所有者。用戶(和相關區域)和訂單(以及相關區域)在兩個不同的調用中使用兩個不同的dbcontext進行加載。在用戶將自己分配給它時保存訂單。我得到一個異常,說acceptchanges不能繼續,因爲對象的鍵值與另一個對象衝突。
這並不奇怪,因爲同一地區可以出現在用戶負責的地區列表和訂單上。
我已經搜查高和低的解決這個問題,但我已經找到了答案似乎是兩種:
- 不要加載的對象之一的相關實體在我的情況那將是用戶的區域。
- 請勿通過使用對象將用戶分配到訂單,只需在訂單對象上設置外鍵標識。
- 使用nHibernate,因爲它顯然處理它。
我試過1並且可以工作,但是我覺得這是錯誤的,因爲那麼我必須先加載沒有區域的用戶,然後再將它與訂單關聯起來,或者做一個淺層克隆。對於這個簡單的案例來說,這很好,但問題是在我的案例中,區域可能會在圖表中出現多次。此外它似乎毫無意義,因爲我有對象,所以爲什麼不讓我連接它們並更新圖形。我需要訂單的整個圖表的原因是我需要向用戶顯示所有信息。所以,因爲我得到了所有的對象,爲什麼我需要重新加載或淺層克隆它才能使其工作?
我試過使用STE,但我遇到了同樣的問題,因爲我無法將對象附加到由另一個上下文加載的圖上。所以我回到原點1.
我會認爲這是除教程代碼之外的其他任何問題的常見問題。然而,我似乎無法找到任何好的解決方案。這讓我想,要麼我不在任何情況下理解使用POCOs/EF或我吮吸使用谷歌找到這個問題的答案。
我已經從Julia Lerman的O'Reilly購買了兩本「編程實體框架」書籍,但似乎無法找到任何解決我的問題的書籍。
有沒有人可以闡明如何處理圖形,其中一些對象可能會重複,而不一定從相同的上下文中加載。
歡迎的StackOverflow!這是一個很好的問題。雖然我不知道答案,但我可以告訴你它會得到一些關注。 –