当我在VS2015中使用ASP运行PM> Remove-Migration -context BloggingContext时。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更新3。


当前回答

要恢复上次应用的迁移,您应该(包管理器控制台命令):

从数据库恢复迁移:PM> Update-Database <prior-migration-name> 从项目中删除迁移文件(否则将在下一步中再次应用) 更新模型快照:PM> Remove-Migration

乌利希期刊指南: 在Visual Studio(2017)的最新版本中,第二步似乎不需要。

其他回答

dotnet ef database update <the-migration-you-want-to-recover>
dotnet ef migrations remove

不要忘记remove- call,因为这将为您删除迁移文件并更新快照文件。

你需要知道的所有事情的总结

所有命令都将使用dotnet编写。

这个解决方案是为。net Core 3.1提供的,但是也应该与下一个版本兼容

删除迁移:

删除迁移将从项目中删除文件 只有当迁移没有应用到数据库时,才能删除该迁移 然而, 要删除上次创建的迁移:cd to_your_project然后dotnet ef migrations remove

注意:只有在您还没有执行dotnet ef数据库更新或在c#代码中调用database . migrate()时,删除迁移才有效,换句话说,只有在迁移还没有应用到您的数据库时才有效。

取消应用迁移(恢复迁移):

从数据库中删除不需要的更改 不从项目中删除迁移文件,但允许您在取消应用后将其删除 要恢复迁移,您可以: 创建一个新的迁移dotnet ef migrations add <your_changes>并应用它,这是微软推荐的。 或者,使用dotnet ef database update <your_migration_name_to_jump_back_to>将数据库更新为指定的迁移(基本上是取消应用或恢复未选择的迁移)

注意:如果要取消应用的迁移不包含已经在数据库中应用并正在使用的特定列或表,则该列或表将被删除,您的数据将丢失。

在恢复迁移之后,您可以删除不需要的迁移

Use:

CLI

> . > dotnet ef database update <previous-migration-name> . bat . bat

包管理控制台

PM> Update-Database <previous-migration-name>

例子:

PM>更新数据库MyInitialMigration

然后尝试删除上次迁移。

删除迁移而不更新数据库无法工作,因为您对数据库应用了更改。

如果使用PMC,请尝试: PM>更新数据库0 这将擦除数据库,并允许您删除解决方案上的迁移快照

您仍然可以使用Update-Database命令。

Update-Database -Migration <migration name> -Context <context name>

然而,根据迁移的名称判断,我假设这是第一次迁移,因此该命令可能不起作用。您应该能够从数据库中的__MigrationHistory表中删除该条目,然后再次运行Remove-Migration命令。您还可以删除迁移文件并重新开始。

要完全删除所有迁移并重新开始,请执行以下操作:

dotnet ef database update 0
dotnet ef migrations remove