Что означает "Возвращение автоматической миграции"? - программирование
Подтвердить что ты не робот

Что означает "Возвращение автоматической миграции"?

После изменения ветвей в исходном элементе управления, использующего Update-Database для возврата к предыдущей миграции, EF иногда отображает текст "Возвращение автоматической миграции", как показано ниже:

Reverting automatic migration: 201305171619008_DescriptiveNameForMigration.
Reverting code-based migration: 201305162023299_Init.

Как Entity Framework определила, что миграция должна быть автоматической и что она делает по-другому?

Здесь, как воспроизвести его, предполагая, что у вас уже есть проект с первыми миграциями кода:

  • Переключение на новую ветку в исходном управлении
  • Внесите изменения в модель, mappers и добавьте миграцию
  • Update-Database
  • Возврат к ветке по умолчанию
  • Update-Database -TargetMigration: 0 -Force
  • См. "Возврат автоматической миграции" в результатах команды "Обновить базу данных"

Это то, что я ДУМАЮ, происходит, пожалуйста, поправьте меня, если я ошибаюсь.

  • Update-Database перечисляет миграции в __MigrationHistory
  • Он находит соответствующие файлы миграции в проекте и вызывает метод Down()
  • Если соответствующий файл миграции не существует, то он лучше всего угадывает, как отменить миграцию на основе моментального снимка в __MigrationHistory
4b9b3361

Ответ 1

Когда вы поднимете перенос, Entity Framework выполнит разницу между последней моделью, записанной в __MigrationsHistory, и текущей моделью и создаст класс миграции, содержащий этот diff. Вы можете редактировать как методы Up, так и Down для миграции этих лесов.

Автоматические миграции позволяют пропустить леса. Если они включены, и вы вызываете Update-Database, она будет выполнять разницу вашей текущей модели и последней модели, записанной в __MigartionsHistory, и применить этот diff, используя "автоматическую" миграцию. Автоматическая миграция по-прежнему получает запись в __MigrationHistory, но в ваш проект не будет добавлен класс миграции. Шаги разницы те же, что и в методе Up, но никогда не было возможности настроить его.

Когда вы возвращаете одну из этих автоматических миграций, она выполняет разницу модели, которую она записала, и модель предыдущей миграции. Эти шаги те же, что и в методе Down вниз.

Если Entity Framework не может найти класс миграции для миграции, предполагается, что это автоматическая миграция. Итак, если вы настроили метод Down, ни одна из этих настроек не будет применяться при возврате.

Надеюсь, это сделает вещи немного яснее.