3

我有一个涉及链接服务器的查询。查询在 SSMS 中运行良好,并且在使用 Dapper 包裹在 C# 中时运行良好

 var conn = GetOpenConnection(connInitializer);
 return query(conn);

产生预期的结果。但是,当我将代码放入TransactionScope时,

using (var trans = new TransactionScope())
{
     var conn = GetOpenConnection(connInitializer);
     var returnValue = query(conn);
     trans.Complete();
     return returnValue;
}

我收到一个错误:

“无法执行操作,因为链接服务器 xxx 的 OLE DB 提供程序“SQLNCLI11”无法开始分布式事务。”

我应该修改一些 SQL Sever 配置以使其工作吗?

4

1 回答 1

3

由于您在显式事务中执行查询,因此您要求查询遵循这些 ACID 属性。您需要配置 Microsoft 分布式事务协调器 (MSDTC)来管理跨数据源的事务。

由于查询最初是在事务范围之外工作的,我猜这是一个简单的选择。如果是这种情况,您可能需要考虑为每个数据源打开单独的连接,在应用程序对象中加载所需的数据,然后从那里合并以产生结果。

否则,请准备好解决 MSDTC 连接问题并监视事务队列中的孤立事务。

于 2013-04-26T19:12:40.410 回答