.NET Core下的TransactionScope
阿新 • • 發佈:2018-11-30
.NET FrameWork時期:
TransactionScope是FCL System.Transactions名稱空間下的分散式事務元件,它預設為本地事務,當系統有需要時可以自動提升為分散式事務,前提是要開啟MSDTC服務。
注:SQL2008及以上資料庫,只有不同的資料庫時才會認為他是一個分散式事務,即:SQL連結串不同時,才會被提升為MSDTC
建立新的TransactionScope物件後,將啟動事務範圍。如下程式碼所示:
void RootMethod() { using(TransactionScope scope = new TransactionScope()) {/* Perform transactional work here */ SomeMethod(); scope.Complete(); } } void SomeMethod() { using(TransactionScope scope = new TransactionScope()) { /* Perform transactional work here */ scope.Complete(); } }
.NET Framework 4.5.0時System.Transactions.TransactionScope 在與 async/await 一起工作時會產生一個嚴重的 bug 。由於這個錯誤,TransactionScope 不能在非同步程式碼中正常操作。
4.5.1修復了這個問題,在建構函式中指定:TransactionScopeAsyncFlowOption.Enabled
預設TransactionScopeAsyncFlowOption是Suppress,相容4.5.1之前的版本
.NET Core時期:
自版本2.1起,.NET Core中的System.Transactions實現不包括對分散式事務的支援,因此不能使用TransactionScope或CommittableTransaction來跨多個資源管理器協調事務。