Сброс Миграции Entity-Framework
Я испортил свои миграции, я использовал IgnoreChanges
о начальной миграции, но теперь я хочу удалить все мои миграции и начать с начальной миграции со всей логикой.
когда я удаляю миграции в папке и пытаюсь и Add-Migration
он не генерирует полный файл (он пуст - потому что я не внес никаких изменений с момента моей последней, но теперь удаленной миграции).
есть Отключить-Миграций команда, так что я могу повторить Enable-Migrations
?
10 ответов
вам нужно :
- удалить состояние: удалить папку миграции в проекте; и
- удалить
__MigrationHistory
таблица в вашей базе данных (может быть под системными таблицами); затем -
выполнить следующую команду в консоли диспетчера пакетов:
Enable-Migrations -EnableAutomaticMigrations -Force
использовать С или без
-EnableAutomaticMigrations
-
и, наконец, вы можете запустить:
Add-Migration Initial
проблема: вы испортили свои миграции, и вы хотели бы сбросить его, не удаляя существующие таблицы.
проблема: вы не можете сбросить миграции с существующими таблицами в базе данных, поскольку EF хочет создать таблицы с нуля.
Что делать:
удалить существующие миграции из таблицы Migrations_History.
удалить существующие миграции с миграцией Папка.
запустите add-migration Reset. Это создаст миграцию в папке миграции, которая включает в себя создание таблиц (но не будет запускать ее, поэтому не будет ошибок.)
теперь вам нужно создать начальную строку в таблице MigrationHistory, чтобы EF имел снимок текущего состояния. EF сделает это, если вы примените миграцию. Однако вы не можете применить миграцию, которую только что сделали, поскольку таблицы уже существуют в вашем база данных. Поэтому перейдите в миграцию и прокомментируйте весь код внутри метода "Up".
теперь запустите update-database. Он применит миграцию (фактически не изменяя базу данных) и создаст строку моментального снимка в MigrationHistory.
теперь вы сбросили миграцию и можете продолжить обычную миграцию.
как о
Update-Database –TargetMigration: $InitialDatabase
в консоли диспетчера пакетов? Он должен сбросить все обновления до самого раннего состояния.
ссылки: Code First Migrations-переход на определенную версию (включая понижение)
чтобы исправить это, нужно:
удалить все *.cs-файлы в папке миграции.
удалить таблицу _MigrationHistory в базе данных
Run
Enable-Migrations -EnableAutomaticMigrations -Force
Run
Add-Migration Reset
затем в public partial class Reset : DbMigration
класс, вам нужно прокомментировать все существующие и текущие таблицы:
public override void Up()
{
// CreateTable(
// "dbo.<EXISTING TABLE NAME IN DATABASE>
// ...
// }
...
}
если вы пропустите этот бит, все потерпят неудачу и ты должен начать сначала!
- Теперь Бегите
Update-Database -verbose
Это должно быть успешным, если вы сделали выше правильно, и теперь вы можете продолжать как обычно.
моя проблема заключалась в том, что я вручную удалил папку миграции. Я сделал это, потому что хотел создать резервную копию содержимого, поэтому я просто вытащил папку из проекта. Позже я исправил проблему, вернув ее (после создания резервной копии), а затем удалив папку миграции, щелкнув ее правой кнопкой мыши в обозревателе решений и выбрав удалить из всплывающего меню.
в EF6
- удалите все ваши файлы в папке "миграции"... Но не "начальное создание" или "конфигурация".
- удалить базу данных.
- теперь бегите
Add-Migration Initial
. - теперь вы можете "обновить базу данных", и все будет хорошо.
В Ядре Entity Framework.
- удалить все файлы из папки миграций.
- введите console
dotnet EF база данных drop-f-v
dotnet EF миграции добавить начальный
обновление базы данных dotnet ef
учитывая, что это все еще появляется, когда мы ищем EF в .NET Core, я опубликую свой ответ здесь (так как он преследовал меня много). Обратите внимание, что есть некоторые тонкости с версией EF 6 .NET (нет начальной команды, и вам нужно будет удалить файлы "Snapshot")
(протестировано в .NET Core 2.1)
вот шаги:
- удалить
_efmigrationhistory
таблица. - Поиск всего решения для файлов, которые содержат снимок от их имени, например
ApplicationDbContextSnapshot.cs
и удалить них. - Run
Add-Migration InitialMigration
Пожалуйста, обратите внимание: вы должны удалить все файлы моментальных снимков. Я провел бесчисленное количество часов, просто удаляя базу данных... Это приведет к пустой миграции, если вы этого не сделаете.
кроме того, в #3 Вы можете просто назвать свою миграцию, как хотите.
вот некоторые дополнительные ресурсы: asp.net Керн Миграции генерируются пустыми