У меня есть приложение ASP.NET Core 2.2, использующее EF Core 2.2.
У меня есть несколько фоновых рабочих потоков, которые я запускаю в ConfigureServices()
. Эти потоки зависят от DbContext и других сервисов, которые я регистрирую в ConfigureServices()
.
Я обнаружил, что когда я пытаюсь использовать Add-Migration
, инструменты EF запускают эти потоки, которые, в свою очередь, генерируют исключения в выводе Add-Migration
, поскольку потоки пытаются получить доступ к объекту базы данных, который еще не существует.
Похоже, что миграция создана успешно, однако это затрудняет использование инструмента, поскольку, похоже, происходит сбой (исключения при выводе, процесс не завершается и т. Д.).
Некоторые варианты, которые я вижу, чтобы избежать этого: -
a) Каким-то образом в ConfigureServices()
обнаруживается, что база данных не соответствует / не соответствует контексту (т. Е. Является "актуальной"), и действуйте соответствующим образом.
b) Запустите мои рабочие потоки где-нибудь еще, которые не будут вызываться, когда мое приложение запускается инструментами EF. Помните, что для запуска этих потоков требуется ServiceProvider
с той же областью, которую я строю в ConfigureServices()
.
в) Обнаружить в моем приложении, что меня вызывают инструменты EF, и избегать запуска рабочих потоков.
Буду признателен за любые советы относительно наиболее подходящей стратегии и наилучшего метода ее достижения.