gpt4 book ai didi

entity-framework - 如何在没有 MSDTC 的情况下在 TransactionScope 内运行两个 Entity Framework 上下文?

转载 作者:行者123 更新时间:2023-12-03 14:56:05 25 4
gpt4 key购买 nike

这个问题在一个简单的例子中不容易重现,但想知道是否有人有任何经验和技巧,这里是问题:

  • 使用 Entity Framework
  • 在应用中有很多点,其中(1)数据写入某些 实体表例如客户,(2) 数据写入 历史
  • 两者 这些操作中的一部分使用 Entity Framework ,但是,它们使用 不同 上下文
  • 这些操作都需要在 中一笔交易 : 即如果一个写失败,另一个不应该写,等等
  • 我可以用 TransactionScope 包装它们,

  • 像这样:
    using (TransactionScope txScope = new TransactionScope()) {
    ...
    }

    但这给了我:

    Microsoft Distributed Transaction Coordinator (MSDTC) is disabled for network transactions.



    我们的数据库管理员告诉我 MSDTC 被选择禁用和 无法安装 .

    因此,我正在尝试使用 MetadataWorkspace 创建我自己的 EntityConnection 进行更改,其想法是 每个上下文将使用相同的 EntityConnection .然而,事实证明,试图让它工作几乎是不可能的,例如目前我继续收到上述错误,即使理论上两个上下文都使用 EntityConnection。例如,很难理解 Entity Framework 在哪里/为什么需要 MSDTC。

    有没有人以前走这条路,有经验或代码示例可以分享?

    最佳答案

    嗯,问题很简单。

    如果您使用的是 sql server 2008,您应该不会遇到这个问题,因为您有可提升的事务,而且 .NET 知道您使用的是相同的持久性存储(数据库),它不会将其提升为 DTC 并将其作为本地提交。 look into promotable transaction with sql server 2008.

    据我所知,Oracle 正在其驱动程序中支持可提升事务,但我不知道状态,MS oracle 驱动程序不支持它。
    http://www.oracle.com/technology/tech/windows/odpnet/col/odp.net_11.1.0.7.20_twp.pdf

    如果您使用的驱动程序不支持可提升事务,则 .NET 不可能使用本地事务进行两个连接。您应该更改架构或说服数据库管理员安装 MSDTC。

    关于entity-framework - 如何在没有 MSDTC 的情况下在 TransactionScope 内运行两个 Entity Framework 上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2370434/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com