переопределить базу данных с новым ядром Migrations asp.net - PullRequest
0 голосов
/ 10 мая 2018

Я создал новую миграцию для основного веб-API asp.net, которая применила изменения к моей базе данных, но позже я удалил миграцию вручную. Теперь я попытался добавить новую миграцию с новыми изменениями, но она выдает ошибку ниже, так как изменения от миграции, которую я удалил, уже применены к базе данных.

An error occurred while calling method 'BuildWebHost' on class 'Program'. Continuing without the application service provider. Error: There is already an object named 'FK_TaskDates_Tasks_TaskId' in the database. Could not create constraint or index. See previous errors

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

Есть ли способ вернуть базу данных в рабочее состояние?

1 Ответ

0 голосов
/ 10 мая 2018

Миграции работают путем сравнения новой миграции с последним запуском. Если нет предыдущих миграций, он будет записывать все в базе данных.

Как правило, для существующей базы данных без предыдущих миграций вам нужно будет добавить базовую миграцию. С EF6 вы можете использовать флаг -IgnoreChanges для этой базовой линии. В EF Core этого нет (если он не был добавлен недавно), поэтому вы можете обойти его, закомментировав материал, уже находящийся в базе данных, в методе Up() и применив его. Важно то, что копия модели собирается для будущих сравнений.

Теперь следующая добавленная миграция будет включать только изменения этой модели, сохраненные в файле кода.

Чтобы ваша текущая система работала, просто закомментируйте материал, который уже существует в методе Up(), оставьте измененный материал и примените его (update-database).

...