EF Core Migrations - как изменить предыдущие миграции?

У меня вопрос по редактированию файлов миграции в EF Core.

Пример: я создал 3 таблицы, используя отдельную миграцию для каждой: AddTable1, AddTable2, AddTable3.

После этого, несколько дней спустя, я решил изменить тип столбца status в Table1 на int, а не string.

После обновления файла миграции AddTable1, удаления базы данных и выполнения команды update-database столбец все еще был определен с типом string.

Я заметил, что все .Designer.cs файлы по-прежнему использовали тип string для status столбца, несмотря на то, что я редактировал Table1 файл миграции.

Я скопировал содержимое файла AppDbContextModelSnapshot.cs и вручную обновил все файлы .Designer.cs для всех миграций (примечание: имя метода в исходном и .Designer.cs файлах отличается).

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

У меня вопрос: есть ли команда, которая будет делать то, что я сделал - «сбросить» файлы «.Designer.cs»?

Если нет, то как его сделать? :)




Ответы (1)


Думайте о миграциях как о коммитах Git. Вы не переписываете предыдущие коммиты после того, как поделились ими с другими членами команды (или, в нашем случае, применили миграцию к базе данных). Вместо этого вы создаете новые миграции с дополнительными изменениями.

Если вы не применили миграцию или не поделились ею с товарищами по команде, вы можете удалить ее и заново создать скаффолд:

Remove-Migration
Add-Migration FixedUpMigration

См. Основные сведения об использовании в документации EF Core Migrations.

person bricelam    schedule 10.07.2019
comment
Я знаю это. Но у меня нет членов команды. Строю проект с нуля. - person denis_n; 11.07.2019
comment
dbContext.Database.EnsureDeleted() и EnsureCreated() хорошо работают на ранней стадии разработки. См. github.com/aspnet/EntityFrameworkCore/issues/ для еще одного безумия. идея. - person bricelam; 11.07.2019
comment
@denis_n Я думаю, что ручное слияние миграции - жизнеспособное решение, хотя и утомительное. Я сохраняю одну миграцию на выпуск rtm, время от времени я так и делаю. Кроме того, вы можете удалить свои миграции и снова добавить их, как указано в bricelam. - person Ray; 12.07.2019