Tôi đã tìm ra câu trả lời trong tài liệu của Entity Framework 6:
Với sự ra đời của EF6, Microsoft khuyến nghị sử dụng các phương pháp API mới: Database.BeginTransaction()
và Database.UseTransaction()
. Mặc dù System.Transactions.TransactionScope
vẫn được hỗ trợ rất tốt nhưng nó không còn cần thiết đối với hầu hết người dùng EF6.
Mặc dù Database.BeginTransaction()
chỉ được sử dụng cho giao dịch hoạt động liên quan đến cơ sở dữ liệu, System.Transactions.TransactionScope
nhưng ngoài ra, nó còn làm cho 'mã C # thuần túy' cũng có thể được giao dịch.
Do đó, hãy sử dụng Database.BeginTransaction()
nơi chỉ thực hiện các hoạt động liên quan đến db trong một giao dịch trong EF6, nếu không, sử dụng System.Transactions.TransactionScope
để trộn các hoạt động db và mã C # với nhau trong một giao dịch.
Đối với những người vẫn thích TransactionScope
cách tiếp cận này, họ nên kiểm tra các hạn chế của nó, đặc biệt là trong các kịch bản đám mây (các kịch bản đám mây không hỗ trợ các giao dịch phân tán).
Thông tin thêm có thể được tìm thấy tại đây