不同BeginTransaction方法之间的区别。

时间:2011-07-28 13:54:05

标签: c# entity-framework ado.net transactions

以下BeginTransaction方法之间的区别是什么:

  1. SqlConnection.BeginTransaction方法

  2. DbConnection.BeginTransaction方法

  3. DbConnection.BeginDbTransaction方法

  4. 此外,它们与System.Transaction中的TransactionScope()方法有什么不同?

1 个答案:

答案 0 :(得分:7)

  1. SqlConnection.BeginTransaction创建一个SqlTransaction,特定于MS SQL Server
  2. DbConnection.BeginTransaction创建一个DbTransaction,它是通用的,并依赖于底层连接来创建特定于数据库的事务。如果您的DbConnection类型为SqlConnection,则为SqlTransaction
  3. DbConnection.BeginDbTransaction是一种受保护的方法,如果您要创建自己的继承自DbConnection的类,则会覆盖该方法。
  4. 修改

    这些都是特定于创建它们的数据库连接,其使用方式与TransactionScope不同,后者与数据库无关。我相信如果你想协调多个连接之间的事务,你必须明确地调用DbConnection.EnlistTransaction(transaction)。使用TransactionScope,连接将(根据数据库提供程序,至少它应该)在TransactionScope中自动登记(如果在打开连接时存在)。在WCF中,TransactionScope也可以跨服务边界传递,并可用于将多个服务调用的结果作为单个事务提交。