2009-12-04 48 views
6

Nếu bạn có somehting như thế này:giao dịch lồng nhau với TransactionScope

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); 

Liệu TransactionScope scope2 bên trong cũng được cuộn lại?

Trả lời

14

Có.

Giao dịch bên trong được đăng ký trong cùng phạm vi của bên ngoài và toàn bộ điều sẽ được khôi phục. Đây là trường hợp, vì bạn đã không đăng ký giao dịch bên trong như một giao dịch mới bằng cách sử dụng TransactionScopeOption.RequiresNew.

7

Xem tại đây để biết giải thích về chủ đề này: http://web.archive.org/web/20091012162649/http://www.pluralsight.com/community/blogs/jimjohn/archive/2005/06/18/11451.aspx.

Ngoài ra, lưu ý rằng scope1.Dispose là không cần thiết vì scope1 sẽ tự động được xử lý ở cuối khối using khai báo nó.

+2

Liên kết này bị hỏng. – adamjford

+0

Bạn nói scope.Dispose là dư thừa, nhưng quan trọng hơn scope1.dispose cuộn trở lại giao dịch. – Mcanic

Các vấn đề liên quan