【问题标题】:EF and Async - Weird live scenarioEF 和 Async - 奇怪的现场场景
【发布时间】:2017-04-17 22:41:28
【问题描述】:

我正在整个基于云的项目中实现异步。

我现在正试图弄清楚为什么我的TransactionScope 总是随机崩溃。消息是“无法执行此操作,因为有待处理的操作”或“该操作对于事务状态无效”以及其他类似消息。
我说它是随机崩溃的,因为如果你重试操作,它最终会起作用......

起初我实现了TransactionScopeAsyncFlowOption.Enabled 过载...失败率降低了。
然后我让整个操作使用相同的DbContext(以前的人为每个 CRUD 操作创建一个新的,比如选择一个用户?给你新的上下文!现在你想要那个用户的销售额?让我用一个新的上下文!创建一个新的销售?让我们在这个新的上下文中这样做......等等......)。失败率进一步下降。
然后我决定尽快await(以前我在操作开始时触发了一些查询,并且只在使用结果之前等待)。这显着提高了故障率。

现在,我在日志中收到一条消息,表明 FK 不匹配...这真的很奇怪,因为这是一个非常可靠的应用程序,而 FK 逻辑出错是一个非常基本的错误。查看日志,我看到类似“客户端 CLIENT_A 错误。完整消息:(bla bla bla) 数据库 db_CLIENT_B 中发生冲突”!!!

在我的多租户应用程序中,每个租户都有自己的数据库,因此 CLIENT_A 应该只有 db_CLIENT_A 有问题。我们对此非常细致。

这是一个非常严重的问题。这意味着要么统一容器提供了错误的 DbContext 实例(它为每个请求配置了单个实例),要么存在关于 async/await 以及并行和不同操作的严重问题......我认为它可能是混合的,考虑到 DbContext 不是线程安全的,Resolve 也不是,尽管它只被调用一次(DBContext 的解析很快在管道上发生)

所以我的问题是:我该怎么做才能解决这个问题?

PS:在过去的 7 天里,我有 5 个日志。这种情况可能会发生更多次(切换),但如果其他数据库具有兼容的 FK……好吧,我会在几天后经理开始发布财务报告时来这里……

【问题讨论】:

    标签: c# entity-framework asynchronous


    【解决方案1】:

    这是由 Unity 引起的。当我在异步范围内调用“解决”时会发生这种情况。

    【讨论】:

      猜你喜欢
      • 2015-03-26
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 2020-05-24
      • 2018-11-01
      • 1970-01-01
      相关资源
      最近更新 更多