使用實體框架(代碼優先於我的情況),我有一個操作,需要我調用SaveChanges更新數據庫中的一個對象,然後SaveChanges再次更新另一個對象。 (我需要第一個SaveChanges來解決EF無法確定首先更新哪個對象的問題)。EF:如何在事務內部調用SaveChanges兩次?
我試着這樣做:
using (var transaction = new TransactionScope())
{
// Do something
db.SaveChanges();
// Do something else
db.SaveChanges();
tramsaction.Complete();
}
當我運行的是,我得到一個異常在第二SaveChanges
電話,稱「基礎提供失敗的開放」。內部異常說我的機器上未啓用MSDTC。
現在,我已經在其他地方看過描述如何啓用MSDTC的帖子,但似乎我還需要啓用網絡訪問等。這聽起來像是完全矯枉過正,因爲沒有其他數據庫參與,讓單獨的其他服務器我不想做一些讓整個應用程序不太安全(或者更慢)的事情。
當然,必須有一個更輕量級的方式來做到這一點(理想情況下沒有MSDTC)?
您在使用SQL 2008的參考System.Transactions的?根據您的實際邏輯,您可以打開多個連接而不升級。當DTC被調用時,這是一個很好的帖子:[事務範圍自動升級到MSDTC](http:// stackoverflow。com/questions/1690892/transactionscope -automation-escalating-to-msdtc-on-some-machines) –
如果你想在一個事務中做所有事情,那麼保存所有事情或保存所有事情有什麼區別?在這兩種情況下,一切都將被保存或沒有保存,所以我沒有看到多個保存的任何優勢。根據以下評論 - 在Sql Server 2005中打開事務中的多個連接(即使源相同)會導致事務被提升爲分佈式事務。這在Sql Server 2008中得到了改進,您可以在trx中打開多個連接到同一個數據源而不會導致升級 – Pawel
@markoreta:我正在使用SQL Server 2012.我沒有(或想要)多個連接,我真的很想使用MSDTC! –