Сброс Миграции Entity-Framework

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

когда я удаляю миграции в папке и пытаюсь и Add-Migration он не генерирует полный файл (он пуст - потому что я не внес никаких изменений с момента моей последней, но теперь удаленной миграции).

есть Отключить-Миграций команда, так что я могу повторить Enable-Migrations?

10 ответов


вам нужно :

  1. удалить состояние: удалить папку миграции в проекте; и
  2. удалить __MigrationHistory таблица в вашей базе данных (может быть под системными таблицами); затем
  3. выполнить следующую команду в консоли диспетчера пакетов:

    Enable-Migrations -EnableAutomaticMigrations -Force
    

    использовать С или без -EnableAutomaticMigrations

  4. и, наконец, вы можете запустить:

    Add-Migration Initial
    

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

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

Что делать:

  1. удалить существующие миграции из таблицы Migrations_History.

  2. удалить существующие миграции с миграцией Папка.

  3. запустите add-migration Reset. Это создаст миграцию в папке миграции, которая включает в себя создание таблиц (но не будет запускать ее, поэтому не будет ошибок.)

  4. теперь вам нужно создать начальную строку в таблице MigrationHistory, чтобы EF имел снимок текущего состояния. EF сделает это, если вы примените миграцию. Однако вы не можете применить миграцию, которую только что сделали, поскольку таблицы уже существуют в вашем база данных. Поэтому перейдите в миграцию и прокомментируйте весь код внутри метода "Up".

  5. теперь запустите update-database. Он применит миграцию (фактически не изменяя базу данных) и создаст строку моментального снимка в MigrationHistory.

теперь вы сбросили миграцию и можете продолжить обычную миграцию.


как о

Update-Database –TargetMigration: $InitialDatabase

в консоли диспетчера пакетов? Он должен сбросить все обновления до самого раннего состояния.

ссылки: Code First Migrations-переход на определенную версию (включая понижение)


чтобы исправить это, нужно:

  1. удалить все *.cs-файлы в папке миграции.

  2. удалить таблицу _MigrationHistory в базе данных

  3. Run Enable-Migrations -EnableAutomaticMigrations -Force

  4. Run Add-Migration Reset

затем в public partial class Reset : DbMigration класс, вам нужно прокомментировать все существующие и текущие таблицы:

public override void Up()
{
// CreateTable(
// "dbo.<EXISTING TABLE NAME IN DATABASE>
// ...
// }
...
}

если вы пропустите этот бит, все потерпят неудачу и ты должен начать сначала!

  1. Теперь Бегите Update-Database -verbose

Это должно быть успешным, если вы сделали выше правильно, и теперь вы можете продолжать как обычно.


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


в EntityFramework 6 попробуйте:

Add-Migration Initial

для обновления исходного файла миграции.


в EF6

  1. удалите все ваши файлы в папке "миграции"... Но не "начальное создание" или "конфигурация".
  2. удалить базу данных.
  3. теперь бегите Add-Migration Initial.
  4. теперь вы можете "обновить базу данных", и все будет хорошо.

В Ядре Entity Framework.

  1. удалить все файлы из папки миграций.
  2. введите console

dotnet EF база данных drop-f-v

dotnet EF миграции добавить начальный

обновление базы данных dotnet ef


учитывая, что это все еще появляется, когда мы ищем EF в .NET Core, я опубликую свой ответ здесь (так как он преследовал меня много). Обратите внимание, что есть некоторые тонкости с версией EF 6 .NET (нет начальной команды, и вам нужно будет удалить файлы "Snapshot")

(протестировано в .NET Core 2.1)

вот шаги:

  1. удалить _efmigrationhistory таблица.
  2. Поиск всего решения для файлов, которые содержат снимок от их имени, например ApplicationDbContextSnapshot.cs и удалить них.
  3. Run Add-Migration InitialMigration

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

кроме того, в #3 Вы можете просто назвать свою миграцию, как хотите.

вот некоторые дополнительные ресурсы: asp.net Керн Миграции генерируются пустыми

сброс миграции Entity Framework 7


Enable-Migrations -EnableAutomaticMigrations -Force