Asp.net core 由于应用程序试图访问数据库,使用EF工具时出现问题

Asp.net core 由于应用程序试图访问数据库,使用EF工具时出现问题,asp.net-core,entity-framework-core,Asp.net Core,Entity Framework Core,我有一个使用EF Core 2.2的ASP.NET Core 2.2应用程序 我有一些后台工作线程,从ConfigureServices()开始。这些线程依赖于DbContext和我在ConfigureServices()中注册的其他服务 我发现当我尝试使用添加迁移时,EF工具会导致这些线程运行,这反过来会在添加迁移输出中引发异常,因为这些线程试图访问一个尚不存在的数据库对象 迁移似乎已成功创建,但是,这使得使用工具变得困难,因为它似乎失败了(输出中出现异常、流程不退出等) 我看到了一些避免这种

我有一个使用EF Core 2.2的ASP.NET Core 2.2应用程序

我有一些后台工作线程,从
ConfigureServices()
开始。这些线程依赖于DbContext和我在
ConfigureServices()
中注册的其他服务

我发现当我尝试使用
添加迁移
时,EF工具会导致这些线程运行,这反过来会在
添加迁移
输出中引发异常,因为这些线程试图访问一个尚不存在的数据库对象

迁移似乎已成功创建,但是,这使得使用工具变得困难,因为它似乎失败了(输出中出现异常、流程不退出等)

我看到了一些避免这种情况的方法:-

a) 以某种方式在
ConfigureServices()
中检测到数据库与上下文不匹配(即“最新”),并相应地采取行动

b) 在EF工具运行我的应用程序时不会调用的其他位置启动我的工作线程。请记住,启动这些线程需要一个与我在
ConfigureServices()
中构建的作用域相同的
ServiceProvider

c) 在我的应用程序中检测到EF工具正在调用我,并避免启动工作线程


如果您能就最合适的策略和实现该策略的最佳方法提供任何建议,我将不胜感激。

EF核心工具使用不同的策略来创建派生的
DbContext
,在文档的一节中进行了解释

看起来您当前正在使用。但根据问题的解释,在您的情况下,最合适的方法似乎是:

您还可以通过实现
IDesignTimeDbContextFactory
接口告诉工具如何创建DbContext:如果在与派生的
DbContext
相同的项目中或在应用程序的启动项目中找到实现此接口的类,这些工具绕过了创建DbContext的其他方法,而是使用设计时工厂


-可能是@IvanStoev谢谢,这看起来正是我想要的;你想回答这个问题让我接受吗?