Откат миграций в EF CodeFirst

Есть некоторые файлы миграции EF CodeFirst. В таблице истории миграций вижу их, после них ещё есть автоматические миграции:

№№ | MigrationId | ContextKey | Model | Version

  1. 20220814121219_Initialization . . 6.4.4
  2. 20220815120521_Initialization1 . . 6.4.4
  3. 20220904134518_AlphabetSymbolSerialNumberAdded . . 6.4.4
  4. 20220904134835_AlphabetSymbolSerialNumberUniqueAdded . . 6.4.4
  5. 20220918161906_AttributesAdded . . 6.4.4
  6. 20220921161906_AutomaticMigration . . 6.4.4
  7. 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 шт):

Автор решения: Viktor

Для отката БД к нужной миграции используйте команду:

Update-Database <migration-name>

Т.е. в вашем случае, если вы хотите откатить БД до миграции AlphabetSymbolSerialNumberAdded, команда должна выглядеть следующим образом:

Update-Database AlphabetSymbolSerialNumberAdded

Подробнее о командах можете почитать по ссылке: https://www.entityframeworktutorial.net/efcore/entity-framework-core-migration.aspx

Почему нужных столбцов в вашей БД нет?

Могу предположить один вариант - у вас была применена последняя актуальная миграция, но её впоследствии изменили. Но так как у вас в БД она уже применена, то ваша структура БД осталась прежняя. Такая ситуация вполне возможна на этапе разработки какой-нибудь фичи в отдельной ветке до её переноса в основную ветку разработки.

→ Ссылка