使用MSDTC和实体框架的提供程序失败

Jer*_*emy 2 .net msdtc entity-framework distributed-computing

我有一个应用程序保存到数据库(使用实体框架)并在单个保存中将文档保存到Sharepoint.我正在尝试将MSDTC与TransactionScope一起使用.

我的EF插入逻辑的一部分包括将外键列表传递给数据层.该层从db中检索"foreign key'd"对象,然后将其添加到主对象.奇怪的是,这适用于第一个外键项目,但在第二个时出现以下消息失败.

System.Data.EntityException:基础提供程序在Open上失败.---> System.Transactions.TransactionManagerCommunicationException:已禁用分布式事务管理器(MSDTC)的网络访问.请使用组件服务管理工具在MSDTC的安全配置中启用DTC以进行网络访问.

MSDTC已启用并在第一次通过期间工作,但不是第二次通过.我假设当我进行几个选择调用时,上下文会以某种方式混淆?

这是我的逻辑:

//Create new order

foreach(int lineItemId in lineItems)
{
   //Retrieve the LineItem object from db
   //Add the LineItem object to the Order
}

//Save using EF
Run Code Online (Sandbox Code Playgroud)

也许我不应该从数据库中检索对象?我错过了在EF中引用关系的简单方法吗?

nit*_*one 6

您需要DB服务器上的DTC,Sharepoint服务器以及运行代码的计算机才能运行并启用网络访问(右键单击Distributed Transaction Coordinator"组件服务"管理单元中节点上的"属性" ,确保Network DTC Access已选中,并且Allow Remote Clients并且在每台机器上检查入站和出站通信(您可以删除其中的一些,但首先使其工作).

第一个调用有效,因为它只与本地DTC通信 - 一旦它尝试使用远程DTC登记tx,它就会失败.