Entity Framework - Начать сначала - Отменить / Откатить все миграции


168

По какой-то причине мои миграции, похоже, перемешаны / повреждены / что угодно. Я нахожусь в точке, где я просто хочу начать все сначала, поэтому есть ли способ полностью отменить все миграции, стереть историю и удалить код миграции, так что я вернулся к исходной точке?

например) PM> Disable-Migrations илиRollback-Migrations

Я не хочу «обновлять» первоначальный шаг миграции (то есть что-то вроде InitialSchemaцели), потому что больше не могу его найти.

Ответы:


358

Вы можете выполнить откат к любой миграции, используя:

Update-Database -TargetMigration:"MigrationName"

Если вы хотите откатить все миграции, вы можете использовать:

Update-Database -TargetMigration:0

или эквивалент:

Update-Database -TargetMigration:$InitialDatabase 

В некоторых случаях вы также можете удалить базу данных и все классы миграции.


7
как обычно, ты лучший.
drzaus

2
Я не понимаю, OP специально говорит: «Я не хочу« обновлять »первоначальный шаг миграции (то есть что-то вроде цели InitialSchema), потому что я больше не могу его найти». Как этот ответ делает то, что он хочет? То, что я ожидал бы случиться, было то, что я был бы в состоянии, где я должен enable-migrationsснова. Они, очевидно, полезны, но выполняют ли они то, о чем просит ФП? (Пожалуйста, не отвечайте «хорошо, он принял ответ». Я пытаюсь понять это, а не быть умником).
Майкл Блэкберн

@MichaelBlackburn: Если вы хотите запустить enable-migrationsснова и разрабатываете базу данных с нуля, вам просто нужно следовать последнему предложению: удалить базу данных и весь связанный с миграцией код. Если вы начали использовать миграции с существующей базой данных, сначала необходимо отменить все миграции с помощью второй или третьей команды, а затем удалить MigrationHistoryтаблицу и весь связанный с миграцией код. Это должно привести вас в исходное положение. Вы также можете получить исходную базу данных из резервной копии (перед использованием миграций) и удалить весь код, связанный с миграцией.
Ладислав Мрнка

4
@MichaelBlackburn: то , что я имел в виду , что все другие решения , я видел сказать вам , чтобы обновить обратно к первому имени миграции, но моя проблема в том , что там не было первоначальной чистой миграции на обновление (сзади) - я просто хотел избавиться от всех миграций, независимо от метода. Поэтому этот ответ был адресован моей озабоченности-TargetMigration:0
drzaus


8

Для ясности, если вы используете LocalDb, когда вы хотите начать с нуля, просто удалите базу данных через Database Explorer, а затем введите enable-migrations -forceв консоли диспетчера пакетов. Не удаляйте базу данных через папку App_Data, иначе у вас возникнет следующая проблема .


2
Будьте осторожны при этом, так как он перезапишет ваши Migrations \ Configuration.cs без предупреждения!
cgatian

Спасибо за предупреждение, я вроде как довольно скоро через некоторое время отбросил код, приятно иметь один раз весь код, размещать его, иметь контроль версий для вашей базы данных как таковой, но я не увидел никакой другой большой выгоды и сначала переключился на базу данных. Я использую Red Gate Sql Compare для отслеживания всех дельт.
Брайан Огден


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.