2

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

我的部分 EF 插入逻辑包括将外键列表传递给数据层。该层从数据库中检索“外键”对象,然后将其添加到主对象。奇怪的是,这适用于第一个外键项目,但在第二个项目上失败,并显示以下消息。

System.Data.EntityException:基础提供程序在打开时失败。---> 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

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

4

2 回答 2

6

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

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

于 2009-09-25T03:14:29.717 回答
3

这实际上与马特的答案相同,但在图形上

在此处输入图像描述

于 2015-10-05T20:40:47.923 回答