2

У меня есть эти миграции:Как консолидировать миграции с помощью EF Core?

00000000000000_First 
20161101000000_Foo 
20161102000000_Bar 
// ...many many MANY more 
20161108000000_Baz 

Я хочу объединить с Foo в Baz в одну новую миграцию. Я знаю, как это сделать в EF, но не в EF Core.

Я попытался это:

dotnet ef update database 00000000000000_First 
// delete all other migration classes 
dotnet ef migrations add Consolidated 
dotnet ef update 

Я ожидаю, что новая Consolidated миграции будет содержать все изменения в модель. Но его методы Up() и Down() пустые.

Что я делаю неправильно?

+1

Я нашел хакерское решение: вручную отредактируйте класс 'ContextModelSnapshot', чтобы удалить все новое, затем добавьте консолидированную миграцию. Но должен быть лучший способ. – grokky

ответ

3

Вам не хватает одного шага. Из-за нового снимка модели после ручного удаления файлов миграции вам нужно будет запустить dotnet ef migrations remove (или Remove-Migration в PMC), чтобы синхронизировать его.

Вместо того, чтобы вручную удалять файлы, вы также можете просто запускать dotnet ef migrations remove несколько раз, но достаточно умны, чтобы обнаруживать удаленные вручную миграции.

+0

Не следую, мой первый шаг - откат db до первой миграции - 'dotnet ef update database First'. Это то, что вы имели ввиду? – grokky

+0

О, извините, я имею в виду 'dotnet ef migrations remove' – bricelam

1

EF Core, при выполнении ef migrations add, НЕ ищет реальную базу данных. Используется только ваш код (и моментальный снимок модели БД в папке Migrations).

Итак, вам нужно удалить миграцию из папки миграции (с использованием dotnet ef migrations remove несколько раз), а затем создать консолидированную с помощью ef migrations add.

О вашей реальной базе данных - если вы хотите снова отбросить ее, вы должны запустить ef database update XXX перед удалением миграции. Или, если вы свертываете все миграции - вы можете просто полностью удалить базу данных, а затем воссоздать новую миграцию (ы).

+0

Я понимаю сейчас, спасибо. Кстати, по данным @bricelam, миграция «достаточно умна для обнаружения удаленных вручную миграций», поэтому, возможно, вам даже не нужно запускать 'remove' и просто удалять файлы миграции. – grokky

 Смежные вопросы

  • Нет связанных вопросов^_^