Откат миграций в EF CodeFirst
Есть некоторые файлы миграции EF CodeFirst. В таблице истории миграций вижу их, после них ещё есть автоматические миграции:
№№ | MigrationId | ContextKey | Model | Version
- 20220814121219_Initialization . . 6.4.4
- 20220815120521_Initialization1 . . 6.4.4
- 20220904134518_AlphabetSymbolSerialNumberAdded . . 6.4.4
- 20220904134835_AlphabetSymbolSerialNumberUniqueAdded . . 6.4.4
- 20220918161906_AttributesAdded . . 6.4.4
- 20220921161906_AutomaticMigration . . 6.4.4
- 20220922161906_AutomaticMigration . . 6.4.4
Проблема: файлы миграций есть, в таблице истории миграций они есть, вроде как, миграция прошла успешно. И вызов Update-Database сообщает, что всё ОК. Но система не видит некоторые столбцы, которые были добавлены этими миграциями - их, действительно, нет в БД.
Пытаюсь откатить миграции, чтобы потом накатить их снова, такой командой:
Update-Database -TargetMigration: 20220904134518_AlphabetSymbolSerialNumberAdded
Получаю ошибку:
The specified migration '20220904134518_AlphabetSymbolSerialNumberAdded' does not exist. Ensure that target migration refers to an existing migration id.
В чём может быть дело? И как исправить ситуацию?
Ответы (1 шт):
Для отката БД к нужной миграции используйте команду:
Update-Database <migration-name>
Т.е. в вашем случае, если вы хотите откатить БД до миграции AlphabetSymbolSerialNumberAdded, команда должна выглядеть следующим образом:
Update-Database AlphabetSymbolSerialNumberAdded
Подробнее о командах можете почитать по ссылке: https://www.entityframeworktutorial.net/efcore/entity-framework-core-migration.aspx
Почему нужных столбцов в вашей БД нет?
Могу предположить один вариант - у вас была применена последняя актуальная миграция, но её впоследствии изменили. Но так как у вас в БД она уже применена, то ваша структура БД осталась прежняя. Такая ситуация вполне возможна на этапе разработки какой-нибудь фичи в отдельной ветке до её переноса в основную ветку разработки.