基于本文here以及问题:Difference Between Transaction and TransactionScope我们知道TransactionScope
TransactionScope类提供了一种简单的方法来将代码块标记为参与事务,而无需您与事务本身进行交互。交易范围可以自动选择和管理环境交易。由于它的易用性和效率,建议您在开发事务应用程序时使用TransactionScope类。
而System.Transactions.Transaction
Transaction类包含开发人员使用资源管理器进行征募的方法。它还提供了用于克隆事务和控制当前事务上下文的功能。
这里的问题是,是否有一种方法可以选择使用两者中的哪一个。显而易见的答案是,如果您没有理由使用隐式事务,则使用隐式事务,但是那是什么原因呢?
显式事务是否在那里,仅支持旧版实现?
环顾各种资源,我偶然发现以下内容,部分回答了我的问题:Working with transactions in EF 6
基于此文档(该文档主要基于EF,但无论如何似乎都存在局限性:]
[
需要.NET 4.5.1或更高版本才能使用异步方法。方法仍有一些限制: 除非您确定只有一个连接(云方案不支持分布式事务),否则不能在云方案中使用。
- 不能与前面几节的Database.UseTransaction()方法结合使用。
- 如果您发布任何DDL并且未通过MSDTC服务启用分布式事务,它将引发异常。
TransactionScope方法的优点:
如果您与给定数据库建立多个连接,或者将与一个数据库的连接与同一数据库中与不同数据库的连接合并在一起,它将自动将本地事务升级为分布式事务(请注意:您必须具有MSDTC服务配置为允许分布式事务为此工作)。
- 易于编码。如果您希望事务是环境事务并且在后台隐式处理而不是在您的控制下显式处理,那么TransactionScope方法可能更适合您。