【问题标题】:Data Access Application Block and Transaction Scope will separate database objects use the same connectionData Access Application Block 和 Transaction Scope 将不同的数据库对象使用相同的连接
【发布时间】:2009-05-26 13:07:59
【问题描述】:

我将 System.Transactions 和 Transaction 范围与 Enterprise Library Data Access Application Block 一起用于我的事务处理。

在某些情况下,我在事务中使用数据库类的单独实例。但是,连接是到同一个数据库。

我想知道在这种情况下应用程序块是否会重用相同的连接而不跨越分布式事务?

【问题讨论】:

    标签: .net asp.net enterprise-library application-blocks


    【解决方案1】:

    简而言之,MSDN 有你的答案:

    “企业库,另一方面,通常为每个请求打开和关闭一个连接。这种方法与 TransactionScope 类的工作方式不兼容。如果有多个连接,则 TransactionScope 类认为事务是分布式的事务。与本地事务相比,分布式事务具有显着的性能和资源开销。” (MSDN)

    还有

    “为避免这种情况,数据库类方法(例如 ExecuteDataSet)会识别 TransactionScope 实例何时处于活动状态,并在此事务中登记数据库调用。如果由于使用 TransactionScope 实例而导致事务当前处于活动状态,则数据库类方法使用单个连接。” (MSDN)

    您没有提及您使用的是什么数据库。在我使用的 Oracle 10g 客户端中,如果您使用 TransactionScope,您将始终拥有分布式事务。看起来这个问题是now addressed in later releases

    您可以在Transaction Statistics下方查看答案。

    【讨论】:

    • 我正在使用 SQL Server 2005。我已阅读上述内容并认为这意味着在我的上述场景中将使用相同的连接,但我似乎并不清楚。
    • 尝试检查统计数据以确保它没有被分发。
    • 您可以通过-> 管理工具 -> 组件服务 -> 计算机 -> 我的电脑 -> 分布式事务处理协调器来访问它
    • 太好了,好像用的是同一个连接。感谢您的帮助
    • 我只想指出,这是在版本 5 中修复的 - msdn.microsoft.com/en-us/library/ff664610%28v=PandP.50%29.aspx
    【解决方案2】:

    TransactionScope 是一只非常奇怪的野兽。根据我的经验,一旦另一个连接(甚至是同一个数据库)打开,数据库事务就会被提升为分布式事务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      • 2010-12-22
      • 2012-01-19
      • 1970-01-01
      相关资源
      最近更新 更多