多线程使用entityframeworkcore(DbContext),导致模型创建异常

问题描述 投票:0回答:1

我正在 azure 上创建一个应用程序服务,它将使用 azure 服务总线上的多个主题。该程序包含一个线程公关主题,并将它们处理到 MSSQL 数据库中。

我遇到的问题是:

这意味着我将有一个活跃的消费者线程、pr 主题,并且每个线程需要写入不同的 MSSQL 表。

这会导致一个问题,因为我写的代码是这样的:

using var scope = serviceScopeFactory.CreateScope();
using var context = scope.ServiceProvider.GetRequiredService<MyDbContext>();

每个线程都会创建一个上下文,并在服务总线消息消耗的线程处理范围内使用它。至少这是想法。

但是,当我尝试使用上下文来确定对象是否已经存在时,程序会抛出异常,声称上下文仍在生成模型的过程中。

我不知道为什么,我以为我要么错误配置了服务的生命周期,要么没有充分实现一些并行处理技术。

c# multithreading entity-framework-core
1个回答
0
投票

解决方案是这样写:

using var scope = serviceScopeFactory.CreateScope();
await using var context = scope.ServiceProvider.GetRequiredService<MyDbContext>();

当您异步要求范围生成模型时,您实际上已经等待它完成! 我觉得自己很愚蠢,忽略了这一点。

无论如何。我希望这可以帮助其他人避免花费太多时间来调试这样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.