Asp.net core 由于应用程序试图访问数据库,使用EF工具时出现问题
我有一个使用EF Core 2.2的ASP.NET Core 2.2应用程序 我有一些后台工作线程,从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工具会导致这些线程运行,这反过来会在添加迁移输出中引发异常,因为这些线程试图访问一个尚不存在的数据库对象 迁移似乎已成功创建,但是,这使得使用工具变得困难,因为它似乎失败了(输出中出现异常、流程不退出等) 我看到了一些避免这种
ConfigureServices()
开始。这些线程依赖于DbContext和我在ConfigureServices()
中注册的其他服务
我发现当我尝试使用添加迁移
时,EF工具会导致这些线程运行,这反过来会在添加迁移
输出中引发异常,因为这些线程试图访问一个尚不存在的数据库对象
迁移似乎已成功创建,但是,这使得使用工具变得困难,因为它似乎失败了(输出中出现异常、流程不退出等)
我看到了一些避免这种情况的方法:-
a) 以某种方式在ConfigureServices()
中检测到数据库与上下文不匹配(即“最新”),并相应地采取行动
b) 在EF工具运行我的应用程序时不会调用的其他位置启动我的工作线程。请记住,启动这些线程需要一个与我在ConfigureServices()
中构建的作用域相同的ServiceProvider
c) 在我的应用程序中检测到EF工具正在调用我,并避免启动工作线程
如果您能就最合适的策略和实现该策略的最佳方法提供任何建议,我将不胜感激。EF核心工具使用不同的策略来创建派生的
DbContext
,在文档的一节中进行了解释
看起来您当前正在使用。但根据问题的解释,在您的情况下,最合适的方法似乎是:
您还可以通过实现IDesignTimeDbContextFactory
接口告诉工具如何创建DbContext:如果在与派生的DbContext
相同的项目中或在应用程序的启动项目中找到实现此接口的类,这些工具绕过了创建DbContext的其他方法,而是使用设计时工厂
-可能是@IvanStoev谢谢,这看起来正是我想要的;你想回答这个问题让我接受吗?