.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來跨多個資源管理器協調事務。