c# - 不同 BeginTransaction 方法之间的区别。

标签 c# entity-framework ado.net transactions

以下 BeginTransaction 方法有什么区别:

  1. SqlConnection.BeginTransaction 方法

  2. DbConnection.BeginTransaction 方法

  3. DbConnection.BeginDbTransaction 方法

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

最佳答案

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

编辑:

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

关于c# - 不同 BeginTransaction 方法之间的区别。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6860096/

相关文章:

c# - MongoDB 组到 C# API

c# - 使用不同的类更改 form1 中的文本标签

c# - 根据类型配置全局 Json.NET 转换器

c# - Entity Framework View 关联不起作用

asp.net - 使用 SQL 填充下拉列表

c# - 使用 ViewModel 进行验证

c# - 在运行时以静态方法获取当前类?

wcf - 服务层中的域逻辑——如何最好地引用它以及公开它

entity-framework - 如何编写通用 LINQ 查询来根据名字、中间名和姓氏过滤数据

c# - 参数缓存如何提高 ADO.NET 中的性能?