Cơ sở dữ liệu.BeginTransaction so với Giao dịch.TransactionScope


87

Sự khác biệt giữa System.Transactions.TransactionScopevà EF6 là Database.BeginTransactiongì?

Ai đó có thể đưa ra một ví dụ nhỏ hoặc chỉ cần giải thích cái nào để sử dụng khi có sự khác biệt rõ ràng?

Tái bút: Trong dự án của tôi, tôi đang sử dụng EF6. Tôi đã đọc tài liệu nhưng nó không giúp được gì nhiều. Cũng đã tra cứu các ví dụ nhưng họ đang sử dụng khá nhiều SqlConnection.BeginTransactionvà bây giờ MS đã giới thiệu tính năng mới này Database.BeginTransactiontrong EF6.

Câu trả lời:


97

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()Database.UseTransaction(). Mặc dù System.Transactions.TransactionScopevẫ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.TransactionScopenhư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 TransactionScopecá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


11
Thật không may, bạn không thể lồng các giao dịch với Database.BeginTransaction, trong khi bạn có thể với TransactionScope.
Triynko

8
'' Mã C # thuần túy 'cũng được giao dịch' thực sự có nghĩa là gì?
Gerard

@Gerard Tôi giả sử điều đó có nghĩa là nếu bạn thực hiện các hoạt động SQL bên ngoài EF (như sử dụng ADO.NET), các hoạt động đó cũng sẽ xảy ra trong cùng một giao dịch.
Rudey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.