0

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

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

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

4

2 回答 2

3

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

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

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

你没有提到你正在使用什么数据库。在我使用的 Oracle 10g 客户端中,如果您使用 TransactionScope,您将始终拥有分布式事务。看起来这个问题现在在以后的版本中得到解决

您可以通过查看Transaction Statistics来检查答案。

于 2009-05-26T13:17:26.243 回答
0

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

于 2009-05-26T13:10:06.710 回答