Как отключить перенос в ASP.NET Core с EF Core
Когда я запускаю 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.<Configure>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 Update 3.
Ответы
Ответ 1
Использование:
CLI
> dotnet ef database update <previous-migration-name>
Консоль диспетчера пакетов
PM> Update-Database <previous-migration-name>
Пример:
PM> Update-Database MyInitialMigration
Затем попробуйте удалить последнюю миграцию.
Удаление миграции без обновления базы данных не работает, поскольку вы применили изменения к базе данных.
Если вы используете PMC, попробуйте:
PM> update-database 0
Это уничтожит базу данных и позволит вам удалить моментальный снимок миграции в вашем решении.
Ответ 2
Чтобы полностью удалить все миграции и начать все заново, сделайте следующее:
dotnet ef database update 0
dotnet ef migrations remove
Ответ 3
Вы все еще можете использовать команду Update-Database
.
Update-Database -Migration <migration name> -Context <context name>
Однако, судя по имени вашей миграции, я предполагаю, что это первая миграция, так что команда может не работать. Вы должны удалить запись из таблицы __MigrationHistory
в своей базе данных, а затем снова запустить команду Remove-Migration
. Вы также можете удалить файл миграции и просто начать заново.
Ответ 4
Чтобы отменить последнюю примененную миграцию, вы должны (команды консоли диспетчера пакетов):
- Отменить миграцию из базы данных:
PM> Update-Database <prior-migration-name>
- Удалить файл миграции из проекта (или он будет снова применен на следующем шаге)
- Обновить снимок модели:
PM> Remove-Migration
UPD: Второй шаг, кажется, не требуется в последних версиях Visual Studio (2017).
Ответ 5
Просто вы можете настроить миграцию по значению
Update-Database -Migration:0
Тогда иди и удали его
Remove-Migration
Ответ 6
Чтобы отменить определенную миграцию (и):
dotnet ef database update <previous-migration-name>
or
PM> Update-Database -Migration <previous-migration-name>
Чтобы отменить все миграции:
dotnet ef database update 0
or
PM> Update-Database -Migration 0
Чтобы удалить последнюю миграцию:
dotnet ef migrations remove
or
PM> Remove-Migration
Чтобы отменить и удалить последнюю миграцию:
dotnet ef migrations remove --force
or
PM> Remove-Migration -Force
Ответ 7
Чтобы "не использовать" самую (недавнюю?) миграцию после того, как она уже была применена к базе данных:
- Откройте "Обозреватель объектов SQL Server" ( "Просмотр → " "Обозреватель объектов SQL Server" )
- Перейдите в базу данных, связанную с вашим проектом, развернув небольшие треугольники в сторону.
- Разверните "Таблицы"
- Найдите таблицу с именем "dbo._EFMigrationsHistory".
- Щелкните правой кнопкой мыши на нем и выберите "Просмотреть данные", чтобы увидеть записи в Visual Studio.
- Удалите строку, соответствующую вашей миграции, которую вы хотите удалить (скажите "да" предупреждению, если будет предложено).
- Запустите "dotnet ef migrations remove" снова в окне команд в каталоге с файлом project.json. Кроме того, запустите команду "Удалить-миграция" в консоли диспетчера пакетов.
Надеюсь, что это поможет и применимо к любой миграции в проекте... Я проверил это только на самую последнюю миграцию...
Счастливое кодирование!
Ответ 8
В консоли диспетчера пакетов:
Update-Database Your_Migration_You_Want_To_Revert_To
Больше вариантов и объяснений того, как отменить миграцию, можно посмотреть здесь
Ответ 9
В целом, если вы используете консоль диспетчера пакетов, правильным способом удаления определенной миграции является обращение к имени миграции.
Update-Database -Migration {Name of Migration} -Context {context}
Другой способ удалить последнюю перенесенную миграцию в соответствии с документами - использовать команду:
dotnet ef migrations remove
Эта команда должна быть выполнена из командной строки разработчика (как открыть командную строку) внутри вашего каталога решений.
Например, если ваше приложение находится внутри имени "Приложение" и находится в папке c:\Projects. Тогда ваш путь должен быть:
C:\Projects\Application
Ответ 10
Вы должны удалить запись миграции '20160703192724_MyFirstMigration' из таблицы _EFMigrationsHistory.
В противном случае эта команда удалит папку "Миграция" и "Удалить миграции":
> remove-migration -force
Ответ 11
Чтобы отключить перенос в EF Core 1.0, используйте команду:
Обновление базы данных dotnet ef {имя_потока}
Используйте имя миграции миграции, до которого вы хотите сохранить свои изменения. Список имен миграции можно найти, используя:
dotnet ef список переходов
Ответ 12
var context = serviceProvider.GetRequiredService<ApplicationDbContext>();
var userManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var roleManaget = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
await context.Database.EnsureDeletedAsync();
Ответ 13
1. Найдите таблицу "dbo._EFMigrationsHistory", затем удалите запись миграции, которую вы хотите удалить. 2. запустить "удаление-миграцию" в PM (Консоль диспетчера пакетов). Работает для меня.
Ответ 14
сначала запустите следующую команду:
PM>update-database -migration:0
а затем запустите этот:
PM>remove_migration
Finish