TransactionScope与IDbTransaction

Sib*_*Guy 12 .net database transactions transactionscope

与IDbTransaction相比,使用TransactionScope有什么优点/缺点?我会建议一些 - 请更正/填写清单.

TransactionScope的优点:

  1. TransactionScope支持分布式事务 - 您可以访问多个数据源或使用多个连接到一个事务内的一个数据源.
  2. TransactionScope更具说明性:我们可以嵌套TransactionScopes,使用它更愉快的服务层(我们不必自己处理IDbConnection和IDbTransaction).
  3. 我不确定第三点,但在这里.IDbTransaction特定于连接 - 您必须在整个事务期间保持连接打开.我不确定在整个TransactionScope期间是否应该打开连接/连接(请澄清).如果没有,可以使用以下工作流:启动事务,打开连接 - 查询 - 检索 - 关闭连接,执行资源密集型计算(保持连接关闭),打开连接 - 查询 - 检索 - 关闭连接,...,提交事务.但我想,在提交之前,TransactionScope不可能保持连接打开.

TransactionScope的缺点:

  1. 它在事务期间不支持IsolationLevel更改.

Mar*_*ell 14

便利性很重要 - 特别是因为它可以用来包装你无法控制的代码(因为默认情况下你自动包装的代码会自动登记).这意味着您可以包装使用该服务器的预先存在的库

性能略有下降,但请注意,在许多情况下,您将使用轻量级事务管理器,而不是DTC - 这意味着您不需要支付完整的DTC成本.

另一个缺点是嵌套事务无法回滚; 任何回滚立即回滚事务.我个人喜欢这种方法; 如果事情生病 - 尽快停止做.

在第3点重新提问; 您可以在事务范围内打开/关闭任意数量的连接,而不会影响行为,除非您发现(根据具体情况)您的事务提升到DTC.如果你与多个trnasaction-aware服务器交谈,它几乎可以保证升级.

另一个区别:不同的超时适用,特别是如果涉及DTC.这是有道理的:长时间运行的分布式事务是有毒的,并且可能表示跨服务器死锁.死锁通常在单个服务器上检测到,但在分发时几乎不可能自动发现,因此硬超时至关重要.