2

據我瞭解,如果我更改條目的狀態情況下那樣:如何添加一個沒有相關實體但保存關係的實體?

context.Entry(doc).State = EntityState.Added; 

背後doc整個對象圖將被設置爲EntityState.Added。這就是這個機制是如何描述here

注意,所有的這些例子中,如果要添加的實體具有 引用其他實體尚未追蹤那麼這些新 實體也將添加到上下文和將在下次調用SaveChanges時插入到 數據庫中。

在我的情況下,這種行爲是不可取的。當我收到doc實體時,它的關係已經在數據庫中(被添加到不同的上下文中)並且再次添加它們會導致錯誤。我需要將doc添加到包含所有引用的數據庫中,但不要嘗試在圖中添加其他對象。

當然,我可以遍歷所有圖形,並明確設置狀態,但有一個更簡單的方法存在嗎?

回答

0

你可以看看GraphDiff

根據這一dedicated blog entry,似乎滿足您的需求:

假設你有一個公司,有許多聯繫。聯繫人不是自己定義的 ,並且是公司的一對多(具有必需的父級)記錄 。即該公司是總根。假設您有 分離式公司圖表及其聯繫人附加並且想要 反映數據庫中此圖表的狀態。

目前使用實體框架,您將需要手動進行接觸的 更新,檢查每一個接觸新 添加,檢查是否有更新和編輯,檢查是否取出,然後從 數據庫中刪除它。一旦你必須爲一個大系統中的幾個不同的聚集體 這樣做,你就會意識到必須有更好,更通用的方法。

好消息是,經過幾次重構,我發現了一個很好的解決方案。