EF和Async - 奇怪的实时场景

时间:2017-04-17 22:41:28

标签: c# entity-framework asynchronous

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

我现在正试图弄清楚为什么我的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 ......那么,我将在几天内在管理人员开始发布财务报告时...

1 个答案:

答案 0 :(得分:0)

这是由Unity引起的。当我打电话给“解决方案”时会发生这种情况。在异步范围内。