Мы запускаем новое приложение с .NET Core, EF Core и Postgres - нам действительно нравятся миграции: -)
Однако я обнаружил проблему, которую не могу понятькак обойти. В некоторых наших миграциях мы используем DbContext
для загрузки записей, запуска некоторой бизнес-логики и повторного сохранения записей. Мы также запускаем database.Context.Migrate()
при запуске веб-сервера, поэтому он всегда работает.
Пока все работает нормально.
К сожалению, он работает до тех пор, пока модель не изменится припозже точка. Рассмотрим следующий порядок миграции:
- Создание моделей
Customer
, Order
и OrderLine
. Добавьте миграции схемы для загрузки структур Изменилось бизнес-правило, поэтому нам нужно установить значение для записи Order
на основе некоторой бизнес-логики. Мы создаем миграцию данных, где загружаем DbContext
, запускаем код и запускаем SaveChangesAsync()
На этом этапе все в порядке.
Нам нужнодобавить миграцию схемы с новым полем в запись Customer
.
Здесь все обрывается. Если к базе данных не применена миграция 2, команда Migrate()
выдает ошибку, как при применении миграции 2, EF пытается сгенерировать оператор выбора, который включает новое поле в 3.
Я не уверен, гдепроблема на самом деле в процессе: разве мы не должны использовать DbContext
при миграции (и операторы SQL с ручным кодом)? Должны ли мы явно делать прогнозы для каждой прочитанной записи, чтобы точно знать, что мы делаем?
Что-то еще?