Когда я запускаю PM> Remove-Migration -context BloggingContext в VS2015 с проектом ASP.NET Core с использованием EF Core, я получаю следующую ошибку:

System.InvalidOperationException: The migration '20160703192724_MyFirstMigration' has already been applied to the database. Unapply it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration.    at Microsoft.EntityFrameworkCore.Migrations.Design.MigrationsScaffolder.RemoveMigration(String projectDir, String rootNamespace, Boolean force) 
    at Microsoft.EntityFrameworkCore.Design.MigrationsOperations.RemoveMigration(String contextType, Boolean force) 
    at Microsoft.EntityFrameworkCore.Tools.Cli.MigrationsRemoveCommand.<>c__DisplayClass0_0.b__0() 
    at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args) 
    at Microsoft.EntityFrameworkCore.Tools.Cli.Program.Main(String[] args) 
 The migration '20160703192724_MyFirstMigration' has already been applied to the database. Unapply it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration.

Как мне отменить его? Я использую последнюю версию ASP.NET Core 1.0, EF Core и VS2015 с обновлением 3.

Ответы (18)

Подробнее и решения здесь:

Я не понимаю, почему мы здесь что-то путаем. Поэтому я напишу четкое объяснение, и что вы должны уведомить.

Все команды будут написаны с использованием dotnet.

Это решение предоставляется для .net Core 3.1, но также должно быть совместимо со всеми другими поколениями

Удаление миграций:

  • Удаление миграции удаляет файл из вашего проекта (что должно быть понятно всем)
  • Удаление миграции возможно только в том случае, если миграция не применяется к базе данных еще
  • Чтобы удалить последнюю созданную миграцию: cd to_your_project затем dotnet ef migrations remove

Note: Removing a migration works only, if you didn't execute yet dotnet ef database update or called in your c# code Database.Migrate(), in other words, only if the migration is not applied to your database yet.

Неприменимые миграции (откат миграции):

  • Удаляет нежелательные изменения из базы
  • Не удаляет файл миграции из вашего проекта, но позволяет удалить его после отмены заявки
  • Чтобы отменить миграцию, вы можете:
    • Создать новую миграцию dotnet ef migrations добавить и применить его, что рекомендовано Microsoft.
    • Или обновите свою базу данных до указанной миграции (которая в основном отменяет или отменяет невыбранные миграции) с помощью dotnet ef database update

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

После отмены миграции вы можете удалить ненужную миграцию

Надеюсь, это кому-то поможет!

Чтобы отменить миграцию в EF Core 1.0, используйте команду:

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

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

список миграций dotnet ef

dotnet ef database update 
dotnet ef migrations remove

Не забывайте remove-Call, так как это удалит файлы миграции и обновит Snapshot-файл.

1. найдите таблицу «dbo._EFMigrationsHistory», затем удалите запись миграции, которую вы хотите удалить. 2. запустите «удалить-миграцию» в личном кабинете (консоль диспетчера пакетов). У меня работает.

Чтобы полностью удалить все миграции и начать все заново, сделайте следующее:

dotnet ef database update 0
dotnet ef migrations remove

Чтобы «отменить» самую (последнюю?) Миграцию после того, как она уже была применена к базе данных:

  1. Откройте обозреватель объектов SQL Server (Просмотр -> «Обозреватель объектов SQL Server»)
  2. Перейдите к базе данных, которая связана с вашим проектом, развернув маленькие треугольники в сторону.
  3. Развернуть «Таблицы»
  4. Найдите таблицу с именем «dbo._EFMigrationsHistory».
  5. Щелкните его правой кнопкой мыши и выберите «Просмотреть данные», чтобы просмотреть записи таблицы в Visual Studio.
  6. Удалите строку, соответствующую вашей миграции, которую вы хотите отменить (скажите «да» предупреждению, если будет предложено).
  7. Снова запустите команду «dotnet ef migrations remove» в командном окне в каталоге, где находится файл project.json. Или выполните команду «Remove-Migration» в консоли диспетчера пакетов.

Надеюсь, это поможет и применимо к любой миграции в проекте ... Я тестировал это только на самой последней миграции ...

Удачного кодирования!

Чтобы отменить последнюю примененную миграцию, вам необходимо (команды консоли диспетчера пакетов):

  1. Отменить миграцию из базы данных: PM> Update-Database <имя-предыдущей-миграции>
  2. Удалить файл миграции из проекта (или он будет повторно применен на следующем шаге)
  3. Обновить снимок модели: PM> Remove-Migration

UPD: В последних версиях Visual Studio (2017) второй шаг не требуется.

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

Update-Database -Migration {Name of Migration} -Context {context}

Другой способ удалить последнюю миграцию, которую вы применили в соответствии с документами, - это использовать команду:

dotnet ef migrations remove

Эта команда должна выполняться из командной строки разработчика (как открыть командную строку) внутри каталога вашего решения.

Например, если ваше приложение находится под именем «Application» и находится в папке c: \ Projects. Тогда ваш путь должен быть:

C:\Projects\Application

You should delete migration '20160703192724_MyFirstMigration' record from '_EFMigrationsHistory' table.

иначе команда ниже удалит миграцию и удалит папку миграции:

Команда PMC:

   > remove-migration -force

Команда интерфейса командной строки:

   > dotnet ef migrations remove -f

Ссылка о командах интерфейса командной строки

Ссылка о командах PMC

сначала выполните следующую команду:

PM>update-database -migration:0

, а затем запустите этот:

PM>remove_migration

Готово

Удаление миграции

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

Консоль диспетчера пакетов

PM> удаление-миграция

CLI> dotnet ef migrations remove

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

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

Отмена миграции

Предположим, вы изменили класс домена и создали вторую миграцию с именем MySecondMigration, используя команду add-migration, и применили эту миграцию к базе данных с помощью команды Update. Но по какой-то причине вы хотите вернуть базу данных в предыдущее состояние. В этом случае используйте команду update-database, чтобы вернуть базу данных к указанному предыдущему моментальному снимку миграции.

Консоль диспетчера пакетов

PM> Обновление базы данных MyFirstMigration

CLI

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

Приведенная выше команда вернет базу данных на основе миграции с именем MyFirstMigration и удалит все изменения, примененные для второй миграции с именем MySecondMigration. Это также удалит запись MySecondMigration из таблицы __EFMigrationsHistory в базе данных.

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

Вы все еще можете использовать команду Update-Database.

Update-Database -Migration  -Context 

Однако, судя по названию вашей миграции, я предполагаю, что это первая миграция, поэтому эта команда может не работать. Вы должны иметь возможность удалить запись из таблицы __ MigrationHistory в своей базе данных, а затем снова запустить команду Remove-Migration. Вы также можете удалить файл миграции и просто начать заново.

Чтобы отменить все миграции, примененные к БД, просто запустите:

update-database 0

После этого следует выполнить Remove-Migration столько раз, сколько файлов миграции видно в каталоге Migration. Команда удаляет последнюю миграцию, а также обновляет снимок.

Просто вы можете настроить таргетинг на миграцию по значению

 Update-Database -Migration:0

Тогда идите и удалите

 Remove-Migration

В консоли диспетчера пакетов:

Обновить базу данных Your_Migration_You_Want_To_Revert_To

Дополнительные параметры и объяснение того, как отменить миграцию, можно увидеть здесь

Вы можете сделать это с помощью:

dotnet ef migrations remove

Предупреждение

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

Чтобы отменить конкретную миграцию (-ы):

dotnet ef database update LastGoodMigrationName
or
PM> Update-Database -Migration LastGoodMigrationName

Чтобы отменить все миграции:

dotnet ef database update 0
or
PM> Update-Database -Migration 0

Чтобы удалить последнюю миграцию:

dotnet ef migrations remove
or
PM> Remove-Migration

Чтобы удалить все миграции:

просто удалите папку миграции.

Чтобы удалить последние несколько миграций (не все):

Нет команды для удаления нескольких миграций, и мы не можем просто удалить эти несколько миграций и их файлы *. Designer.cs, поскольку нам нужно сохранить файл моментального снимка в согласованном состоянии. Нам нужно удалять миграции одну за другой (см. Чтобы удалить последнюю миграцию выше).

Чтобы отменить и удалить последнюю миграцию:

dotnet ef migrations remove --force
or
PM> Remove-Migration -Force

Используйте:

CLI

> обновление базы данных dotnet ef <имя-предыдущей миграции>

Консоль диспетчера пакетов

PM> Update-Database <имя-предыдущей миграции>

Пример:

PM> Обновление базы данных MyInitialMigration

Тогда попробуйте удалить последнюю миграцию.

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

Если вы используете PMC, попробуйте: PM> update-database 0 Это приведет к стиранию базы данных и позволит вам удалить моментальный снимок миграции из вашего решения

2022 WebDevInsider