TransactionScope与IDbTransaction

时间:2011-03-17 09:28:55

标签: .net database transactions transactionscope

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

TransactionScope的优点:

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

    1. 在事务处理期间不支持IsolationLevel更改。

1 个答案:

答案 0 :(得分:13)

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

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

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

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

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