当我仅使用LinqToSql和Ado.Net时,为什么TransactionScope使用分布式事务

Ian*_*ose 3 sql-server ado.net transactionscope distributed-transactions linq-to-sql

我们在一台机器上遇到问题,并显示错误消息:

"服务器XXX上的MSDTC不可用."

代码使用TransactionScope来包装一些LingToSql数据库代码; 交易中还有一些原始的Ado.net.

由于只访问了一个sql数据库(2005),为什么要使用分布式事务呢?

(我不想知道如何启用MSDTC,因为代码需要在服务器上使用其当前设置)

Ran*_*der 7

当您的事务使用多个数据库连接时,几乎总会发生这种情况.所以,假设您正在更新两个表.您可以使用一个连接更新第一个表,但使用不同的第二个连接更新第二个表.这将导致事务升级到MSDTC,即使使用TransactionScope对象也是如此.

我们解决这个问题的方法是在执行事务时,我们为所有写操作使用单个数据库上下文对象.这消除了升级.由于这样做,我们从未出现过MSDTC消息.

兰迪

  • ...单个datacontext不会单独执行,您还需要提供与DC构造函数的连接以确保它使用单个连接.... (4认同)