.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来跨多个资源管理器协调事务。