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


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

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

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

10 265

10 ответов:

вам нужно :

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

    Enable-Migrations -EnableAutomaticMigrations -Force
    

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

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

    Add-Migration Initial
    

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

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

Что делать:

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

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

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

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

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

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

как о

Update-Database –TargetMigration: $InitialDatabase

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

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

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

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

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

  3. выполнить Enable-Migrations -EnableAutomaticMigrations -Force

  4. выполнить 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. введите в консоли

dotnet EF Database 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