以下BeginTransaction方法之间的区别是什么:
SqlConnection.BeginTransaction方法
DbConnection.BeginTransaction方法
DbConnection.BeginDbTransaction方法
此外,它们与System.Transaction中的TransactionScope()方法有什么不同?
答案 0 :(得分:7)
SqlConnection.BeginTransaction
创建一个SqlTransaction
,特定于MS SQL Server DbConnection.BeginTransaction
创建一个DbTransaction
,它是通用的,并依赖于底层连接来创建特定于数据库的事务。如果您的DbConnection
类型为SqlConnection
,则为SqlTransaction
。DbConnection.BeginDbTransaction
是一种受保护的方法,如果您要创建自己的继承自DbConnection
的类,则会覆盖该方法。修改强>
这些都是特定于创建它们的数据库连接,其使用方式与TransactionScope不同,后者与数据库无关。我相信如果你想协调多个连接之间的事务,你必须明确地调用DbConnection.EnlistTransaction(transaction)
。使用TransactionScope,连接将(根据数据库提供程序,至少它应该)在TransactionScope中自动登记(如果在打开连接时存在)。在WCF中,TransactionScope也可以跨服务边界传递,并可用于将多个服务调用的结果作为单个事务提交。