Сброс Миграции Entity-Framework
Я испортил свои миграции, я использовал IgnoreChanges
на начальной миграции, но теперь я хочу удалить все мои миграции и начать с начальной миграции со всей логикой.
когда я удаляю миграции в папке и попробовать и Add-Migration
он не генерирует полный файл (он пуст - потому что я не внес никаких изменений с момента моей последней, но теперь удаленной миграции).
есть Отключить-Миграций команда, так что я могу повторить Enable-Migrations
?
10 ответов:
вам нужно :
- удалить состояние: удалить папку миграции в вашем проекте; и
- удалить
__MigrationHistory
таблица в вашей базе данных (может быть под системными таблицами); затемвыполнить следующую команду в консоли диспетчера пакетов:
Enable-Migrations -EnableAutomaticMigrations -Force
использовать С или без
-EnableAutomaticMigrations
и, наконец, вы можете запустить:
Add-Migration Initial
проблема: вы испортили свои миграции, и вы хотели бы сбросить его, не удаляя существующие таблицы.
проблема: вы не можете сбросить миграции с существующими таблицами в базе данных, так как EF хочет создать таблицы с нуля.
Что делать:
удалить существующие миграции из таблицы Migrations_History.
удалить существующие миграции с миграцией Папка.
выполнить сброс add-migration. Это создаст миграцию в вашей папке миграции, которая включает создание таблиц (но она не будет запускать ее, поэтому она не будет ошибаться.)
теперь вам нужно создать начальную строку в таблице MigrationHistory, чтобы EF имел снимок текущего состояния. EF сделает это, если вы примените миграцию. Однако вы не можете применить миграцию, которую вы только что сделали, поскольку таблицы уже существуют в вашем база данных. Поэтому перейдите в миграцию и закомментируйте весь код внутри метода "Up".
теперь запустите update-database. Он применит миграцию (хотя на самом деле не изменяет базу данных) и создаст строку моментального снимка в MigrationHistory.
теперь вы сбросили свои миграции и можете продолжить нормальные миграции.
как о
Update-Database –TargetMigration: $InitialDatabase
в консоли диспетчера пакетов? Он должен сбросить все обновления до самого раннего состояния.
ссылки: Code First Migrations-переход на определенную версию (включая понижение)
чтобы исправить это, нужно:
удалить все *.cs-файлы в папке миграции.
удалить таблицу _MigrationHistory в базе данных
выполнить
Enable-Migrations -EnableAutomaticMigrations -Force
выполнить
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.
- удалить все файлы из папки миграций.
- введите в консоли
dotnet EF Database 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 Керн Миграции генерируются пустые