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 もロールバックされますか?

4

2 に答える 2

20

はい。

内側のトランザクションは外側のトランザクションと同じスコープに登録され、すべてがロールバックされます。これは、TransactionScopeOption.RequiresNewを使用して内部トランザクションを新しいトランザクションとして登録しなかったためです。

于 2009-12-04T08:06:39.100 に答える
7

このテーマの説明については、こちらをご覧ください:http: //web.archive.org/web/20091012162649/http ://www.pluralsight.com/community/blogs/jimjohn/archive/2005/06/18/11451.aspx 。

また、それを宣言するブロックの最後に自動的に配置されるscope1.Disposeため、は冗長であることに注意してください。scope1using

于 2009-12-04T08:05:24.277 に答える