使用TransactionScope实现嵌套事务

11

如果你有像这样的东西:

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也会被回滚吗?

2个回答

20

是的。

内部事务与外部事务在同一作用域中,整个事务将回滚。这是因为您没有使用TransactionScopeOption.RequiresNew将内部事务作为新事务注册。


7

你说scope.Dispose是多余的,但更重要的是scope1.dispose会回滚事务。 - Mcanic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接