【问题标题】:Provider Failure Using MSDTC with Entity Framework将 MSDTC 与实体框架一起使用的提供程序失败
【发布时间】:2009-09-24 15:52:18
【问题描述】:

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

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

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

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 中引用关系的简单方法?

【问题讨论】:

    标签: .net entity-framework msdtc distributed-computing


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多