保存單個實體而不是整個上下文

c# entity-framework

我遇到了一個場景,我基本上需要將一對多關聯的子實體的更改寫入數據庫,但不保存對父實體所做的任何更改。

實體框架目前處理上下文範圍(EntityContext.SaveChanges())中的數據庫提交,這對於實施關係等是有意義的。但我想知道是否有一些最佳實踐或者可能是推薦的方法去做好 - 數據庫提交個人entite而不是整個上下文。

一般承認的答案

最佳做法?除此之外,你的意思是“不要這樣做!”?

我認為沒有最佳做法使ObjectContext與數據庫的狀態不同。

如果你必須這樣做,我會新建一個新的ObjectContext並在那裡對子實體進行更改。這樣,兩種情況都是一致的。


熱門答案

我有類似的需求。我正在考慮的解決方案是在所有實體上實現包裝器屬性,這些實體私下存儲任何屬性更改,而不會影響實際的實體屬性。然後,我將向實體添加一個SaveChanges()方法,該方法將更改寫入實體,然後在上下文中調用SaveChanges()。

這種方法的問題在於您需要使所有實體都符合此模式。但是,它似乎工作得很好。它確實有另一個缺點,如果你對包含大量數據的很多對象進行了很多更改,你最終會在內存中找到無關的副本。

我能想到的唯一其他解決方案是,在保存更改後,保存所有已更改/添加/刪除的實體的實體狀態,將它們設置為未修改,除了您要更改的實體,保存更改,然後恢復狀態其他實體。但這聽起來可能很慢。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因