我有一个涉及链接服务器的查询。查询在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配置才能使其正常工作吗?
答案 0 :(得分:3)
由于您在显式事务中执行查询,因此要求查询遵循these ACID properties。您需要configure Microsoft Distributed Transaction Coordinator (MSDTC)来管理跨数据源的交易。
由于查询最初在交易范围之外工作,我猜它是一个简单的选择。如果是这种情况,您可能需要考虑为每个数据源打开单独的连接,在应用程序对象中加载必需的数据,然后从那里合并以生成结果。
否则,请准备好解决MSDTC连接问题并监视孤立事务的事务队列。