2011-01-12 56 views
31

我試圖解決非常相似的一個這裏概述的錯誤:不同的EF 4 SaveOptions對ObjectContext有什麼影響?

InvalidOperationException when calling SaveChanges in .NET Entity framework

看來,解決方案(我還沒有嘗試過但應該承認)是通過System.Data.Objects .SaveOptions.None作爲SaveChanges()方法的SaveOptions參數。

因此,在我這樣做之前,我試圖瞭解不同的SaveOptions是如何工作的(None,AcceptAllChangesAfterSave,DetectAllChanges)。但是我一直無法找到明確的解釋,我也不確定默認是什麼。任何人都可以澄清?

謝謝!

更新:我已經發布了實際問題的問題在這裏:System.InvalidOperationException when trying to iteratively add objects using EF 4

回答

17

問得好(+1)。

簡而言之(據我所知):

SaveOptions.DetectChangesBeforeSave:這是默認的。當您執行ObjectContext.SaveChanges()時,將調用方法DetectChanges()來同步OSM中的附加實體。

SaveOptions.AcceptAllChangesAfterSave:當你做ObjectContext.SaveChanges(),該方法AcceptAllChanges()被稱爲 - 這是OSM,在圖中的實體迭代,地址和設置不變/獨立的膽量。

SaveOptions.None:當你做ObjectContext.SaveChanges(),立即保存更改 - 完全不同步。無論在圖中什麼都將被保存。

以我的經驗,我沒有與此 - 我已經把它作爲默認值(DetectChangesBeforeSave)。

有時POCO的我聽說你需要明確地打電話給DetectChanges,但我從來沒有見過將SaveOptions更改爲無的推薦/解決方案。

您確定該問題的解決方案是將SaveOptions設置爲無?也許你應該提供詳細信息(或者提出一個單獨的問題),因爲這樣的改變會影響你的整個持久層。

+0

由於默認 - 這正是我提出這個問題的原因,因爲這會影響我的整個應用程序來解決這個問題。我非常不願意用我不完全瞭解的解決方案來做到這一點。當你說OSM時,你指的是什麼?編輯:ObjectStateManager。得到它了。 :) – morganpdx 2011-01-12 22:49:50

18

短期修正

SaveOptions.DetectChangesBeforeSave:這是默認的。在執行 ObjectContext.SaveChanges()時,方法DetectChanges()被調用到 OSM中的同步附加實體。

的SaveChanges是SaveChanges(SaveOptions optsions)方法,在此參數的版本稱此

SaveChanges(SaveOptions.DetectChangesBeforeSave | SaveOptions.AcceptAllChangesAfterSave) 

SaveOptions的重載版本是一個標誌枚舉和結束,SaveOptions.DetectChangesBeforeSave | SaveOptions.AcceptAllChangesAfterSaveSaveChanges()不是DetectChangesBeforeSave

相關問題