为什么在我只使用LinqToSql和Ado.Net时,TransactionScope会使用分布式事务

3
我们在一台机器上遇到了问题,错误信息如下:
“服务器XXX上的MSDTC不可用。”
代码使用TransactionScope来包装一些LingToSql数据库代码,事务中还有一些原始的Ado.net。
由于只访问一个SQL数据库(2005),为什么还要使用分布式事务呢?
(我不想知道如何启用MSDTC,因为代码需要在当前设置的服务器上运行)
1个回答

7
这几乎总是发生在您的事务使用多个数据库连接时。比如说,您可能会使用一个连接更新第一个表,但使用另一个不同的连接更新第二个表。即使使用 TransactionScope 对象,这也会导致事务升级为 MSDTC。
我们解决这个问题的方法是,在执行事务时,我们使用一个单一的数据库上下文对象来进行所有写操作。这消除了升级问题。自从采用这种方法以来,我们再也没有看到 MSDTC 消息出现过。
兰迪

4
单独的数据上下文无法完成任务,您还需要向DC的构造函数提供连接,以确保它使用单个连接。 - KristoferA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接