Trước hết, có không có cái gọi là giao dịch lồng nhau trong SQL Server . Đây là điều quan trọng.
Thứ hai, cả hai TransactionScope đều sử dụng conn1 nên bạn (ở cấp SQL Server) đang tăng @@TRANCOUNT
cho mỗi BEGIN TRANSACTION
Giải thích đơn giản:giao dịch bên trong được cam kết khi giao dịch bên ngoài cam kết bởi vì việc quay lại bên trong sẽ quay trở lại cả hai giao dịch
Đó là, COMMIT TRANSACTION
(ngụ ý bởi .Complete
và .Dispose
) giảm @@TRANCOUNT
trong khi ROLLBACK TRANSACTION
(ngụ ý bởi .Dispose
duy nhất) đưa nó trở lại số không. Vì vậy, quá trình khôi phục bên trong bị chặn do "không có thứ gì gọi là giao dịch lồng nhau"
Nếu bạn đã sử dụng conn2 đúng cách trong phạm vi bên trong ', nó sẽ hoạt động như mong đợi vì 2 giao dịch không liên quan ở cấp máy chủ cơ sở dữ liệu. Đó là nơi nó quan trọng ...