【问题标题】:Entity Framework 6 prevent transaction escalation when using multiple contexts that refer to the same databaseEntity Framework 6 在使用引用同一数据库的多个上下文时防止事务升级
【发布时间】:2014-07-08 11:55:14
【问题描述】:

我偶然发现了一个问题,但我找不到答案(或者我的谷歌技能真的很垃圾)。

我们的解决方案是一个 ASP MVC4 C# 网站和多个类库。我们使用 MS SQL2008 和 EntityFramework 6。

假设我有 Foo 和 Bar 对象类型。 Foo 包含一个 Bar 对象。保存 Foo 后,我必须保存 Bar。保存 Foo 和 Bar 的方法在不同的类库中定义,每个库都有自己的实体模型,其中包含来自相同基础的相关模式的表。现在的问题是我使用事务,调用保存 Bar 的方法导致事务级别升级“MSDTC 禁用”异常。

有没有办法避免必须使用 MSDTC 并仍然使用引用同一基础的不同实体模型?

【问题讨论】:

  • 连接字符串是否完全相等?
  • 嗯,这可能吗?字符串之间的区别在于名称和元数据。
  • 如果您连接到不同的服务器,事务必须是这些服务器之间的分布式事务。而且,我想记住,检查它是否是同一台服务器的方式与连接字符串有关。
  • 看这个:[什么服务器属性使 TransactionScope 升级到 MSDTC?][1] 和这个:[TransactionScope 在某些机器上自动升级到 MSDTC?][2] [1]:dba.stackexchange.com/questions/14318/… [ 2]:stackoverflow.com/questions/1690892/…
  • 我的应用配置如下所示:

标签: c# entity-framework transactions msdtc escalation


【解决方案1】:

好的,所以我们找到了解决方案。首先,字符串必须完全相等(不包括元数据)。 如果这没有帮助,请尝试使处理将 FOO 和 BAR 保存到数据库中的业务逻辑类使用相同的 TransactionHandler 实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 2013-12-16
    相关资源
    最近更新 更多