2013-02-18 45 views
3

有一個答案here來解釋如何使用Entity Framework執行交易 但是,該解決方案不適用於代碼優先。 我已經嘗試和我的測試表明下面沒有工作使用Entity Framework進行交易代碼優先

using (var scope = new TransactionScope()) 
{ 
     DBContext1.SaveChanges() 
     If (ForceFailure) return 0 // used in testing 
     DBContext2.SaveChanges() 
     scope.Complete(); 
} 

但是我覺得緊張,因爲我不再傳遞參數的SaveChanges或致電AcceptAllChanges

如何建立自己是否可以信任我的解決方案?

+0

你不相信什麼方面(數據庫一致性,上下文一致性等)? – 2013-02-18 20:37:03

+0

我想知道這兩個savechanges運行或者都不運行。我的測試表明情況就是這樣。但是,因爲代碼與早期的EF版本看起來有很大不同,所以我正在尋找一些同行或文檔驗證。 – 2013-02-18 20:50:05

回答

2

SaveChanges(Boolean)ObjectContext的一部分,而不是DbContext。請注意,方法SaveChanges(Boolean) in ObjectContext已被棄用,用於支持SaveChanges(SaveOptions)

如果您仍想使用DbContext,則可以使用例如擴展方法將其自己的SaveChanges方法超載以使用IObjectContextAdapter.ObjectContext

+1

DbContext確實有一個SaveChanges方法 – 2013-04-11 00:28:49

+0

它確實存在,但它不是相同的方法('DbContext'不擴展ObjectContext'),這就是爲什麼它缺少你需要的參數。但是,您可以通過'DbContext'實現的'IObjectContextAdapter'接口檢索'DbContext'內部使用的'ObjectContext'的引用,並使用您需要的'SaveChanges'方法。 – tne 2013-04-11 07:33:34

+0

你能告訴我你在哪裏發現DBContext SaveChanges已被棄用?我發現它是相反的 - 但不是來自微軟。 – 2013-04-11 09:57:28

相關問題