【问题标题】:Nested Transactions with TransactionScope带有 TransactionScope 的嵌套事务
【发布时间】:2009-12-04 08:01:56
【问题描述】:

如果你有这样的事情:

IBinaryAssetStructureRepository rep = new BinaryAssetStructureRepository();
var userDto = new UserDto { id = 3345 };
var dto = new BinaryAssetBranchNodeDto("name", userDto, userDto);
using (var scope1 = new TransactionScope())
{
    using(var scope2 = new TransactionScope())
    {
        //Persist to database
        rep.CreateRoot(dto, 1, false);
        scope2.Complete();
    }
    scope1.Dispose();
}
dto = rep.GetByKey(dto.id, -1, false);

内部的 TransactionScope scope2 也会被回滚吗?

【问题讨论】:

    标签: c# .net transactionscope


    【解决方案1】:

    是的。

    内部事务注册在与外部事务相同的范围内,整个事务将回滚。就是这种情况,因为您没有使用 TransactionScopeOption.RequiresNew 将内部事务注册为新事务。

    【讨论】:

      【解决方案2】:

      有关此主题的说明请参见此处:http://web.archive.org/web/20091012162649/http://www.pluralsight.com/community/blogs/jimjohn/archive/2005/06/18/11451.aspx

      另外,请注意scope1.Dispose 是多余的,因为scope1 将自动放置在声明它的using 块的末尾。

      【讨论】:

      • 你说scope.Dispose是多余的,但更重要的是scope1.dispose回滚了事务。
      猜你喜欢
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 2015-06-24
      • 2015-03-10
      • 1970-01-01
      相关资源
      最近更新 更多