【问题标题】:What to use - SqlTransaction or TransactionScope in my architecture使用什么——我的架构中的 SqlTransaction 或 TransactionScope
【发布时间】:2011-11-07 13:59:29
【问题描述】:

我们使用 3 层架构,其中包含 SqlHelper -> DAL(数据访问层)-> BAL -> UI

DAL 中的任何类都可以调用另一个 DAL,就像任何 BAL 可以调用另一个 BAL 或它自己的 DAL。

例如。

class Customer_DAL { display_CusDal(); }
class Customer_BAL { display_CusBal(); }   

class Product_DAL { display_ProDal(); }
class Product_BAL { display_ProBal(); }


display_CusDal()
{
 //call display_ProDal()
 //Do some work
}

display_CusDal 函数应作为事务运行,实习生意味着在此函数中进行的任何插入都应与事务对象相关联。

由于 display_CusDal 可以调用 display_ProDal 可能会或可能不会在另一个事务中的表中插入数据,所以我需要在事务中处理这些。

我应该使用什么方法。

【问题讨论】:

    标签: .net transactions transactionscope


    【解决方案1】:

    SqlTransactions 仅适用于 SQL,并且需要您明确添加它们的用法。 TransactionScope 的好处是可以让更多的参与方加入到交易中。所以不仅是SqlTransactions,还有来自其他类型的事务。在使用事务作用域的时候,也去掉了很多代码。

    另一方面,使用事务作用域会引入一些奇怪的行为。在模糊的情况下,事情会升级到 MSDTC。

    对于您的情况,事务范围听起来是最好的选择。通过这种方式,很容易在单个事务中加入在Customer_DALProduct_DAL 上执行的多个操作,或在同一个 DAL 上执行的多个操作。

    用于 SqlTransactions 的专业人士

    • 简单易懂。
    • 显式
    • 您拥有完全的控制权。

    SqlTransaction 的缺点

    • 需要更多代码。
    • 更难加入更多派对。
    • 更难加入其他交易。
    • 将您的事务绑定到 SQL(因此在切换到其他持久存储时不支持)

    TransactionScope 的专业人士

    • 易于使用。
    • 让您的代码保持简单,您无需担心Customer_DALProduct_DAL 混合使用。
    • 开箱即用的出色事务管理。包括在使用多个数据库时升级到 MSDTC。

    TransactionScope 的缺点

    • 升级发生时含糊不清。

    【讨论】:

    • 感谢您的回应。 “升级发生时含糊不清。”我不清楚会发生什么升级。我对 TransactionScope 很陌生。在单个数据库上使用所有事务时,性能成本对我来说似乎很容易。但是在 TransactionScope 中可能会发生什么升级。
    • @ShantanuGupta TransactionScope 可以将事务升级到 MSTDSC,这是一种分布式事务服务,在多方加入事务时使用。例如,多个数据库。因此,当在单个事务范围内查询多个数据库时,事务管理器会将事务升级到 MSDTSC。大多数关于升级(和麻烦)的信息可以在这里阅读:stackoverflow.com/questions/1690892/…
    • 一个重要的注意事项是同一个数据库的多个连接也会升级事务。
    【解决方案2】:

    我只是想在@pjvds 回复中添加一些重点,即事务被提升到 MSDTC。我们曾尝试使用 TransactionScope,它在我们的开发环境中运行良好。我们的代码总是导致提升,但我们的开发机器巧合地安装、打开和配置了 MSDTC。然后我们部署到我们的生产服务器,但事情没有奏效。 MSDTC 已关闭。我们的一些生产服务器位于我们无法控制服务器的客户端位置。我们不想要求我们的客户打开和配置 MSDTC。所以我们拿出了 TransactionScope 并推出了我们自己的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 2012-02-09
      • 2022-01-13
      • 1970-01-01
      • 2021-03-04
      • 2010-11-10
      相关资源
      最近更新 更多