当我在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 -migration:0

然后运行这个:

PM>remove_migration

完成

其他回答

因为这个问题本身涉及到第一次迁移,所以这个答案适用于任何正在寻找恢复上次迁移的方法的人,因为大多数答案不包括替代场景(对我们大多数人来说,这不是我们的第一次迁移,我们不能抹掉整个迁移历史)。这些命令用于包管理器控制台。

假设你的代码中有以下迁移:

20220110 _initialmigration 20200210 _goodmigration 20200210 _lastgoodmigration 20200210 _badmigration 20200210 _badmigrationagain

如果您已经像问题中那样将迁移应用到db

运行: Update-Database -Migration <Last_Good_Migration_Name> 注:名称不能有日期前缀。例如:Update-Database -Migration LastGoodMigration 然后删除坏迁移运行: Remove-Migration 注意:因为我们有两次糟糕的迁移,所以运行两次Remove Migration命令。

如果您还没有将迁移应用到db

运行:

Remove-Migration

在本例中,运行两次Remove Migration命令。

希望这能帮助到一些人。

一般来说,如果您正在使用Package Manager Console,删除特定迁移的正确方法是引用迁移的名称

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

另一种删除你根据文档应用的最后一个迁移的方法是使用命令:

dotnet ef migrations remove

这个命令应该从解决方案目录中的开发人员命令提示符(如何打开命令提示符)执行。

例如,如果你的应用程序名为“application”,在文件夹c:\Projects中。那么你的路径应该是:

C:\Projects\Application

移除迁移

如果上次迁移没有应用到数据库,则可以删除该迁移。使用下面的remove命令删除最后创建的迁移文件并恢复模型快照。

包管理控制台

点> remove-migration

CLI> dotnet ef迁移删除

上面的命令将删除最后一次迁移,并将模型快照恢复到前一次迁移。请注意,如果迁移已经应用到数据库,那么它将抛出以下异常。

迁移已经应用到数据库。恢复并重试。如果迁移已经应用到其他数据库,请考虑使用新的迁移恢复其更改。

恢复迁移

假设您更改了域类,并使用add-migration命令创建了名为MySecondMigration的第二次迁移,并使用Update命令将此迁移应用到数据库。但是,由于某种原因,您希望将数据库恢复到以前的状态。在这种情况下,使用update-database命令将数据库恢复到指定的先前迁移快照。

包管理控制台

更新数据库MyFirstMigration

CLI

. net ef数据库更新MyFirstMigration。

上面的命令将根据名为MyFirstMigration的迁移恢复数据库,并删除应用于名为MySecondMigration的第二次迁移的所有更改。这也将从数据库中的__efmigrationhistory表中删除MySecondMigration条目。

注意:这不会删除与MySecondMigration相关的迁移文件。使用remove命令将它们从项目中删除。

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

dotnet ef database update 0
dotnet ef migrations remove

在迁移已经应用到数据库后“取消”最近的迁移:

Open the SQL Server Object Explorer (View -> "SQL Server Object Explorer") Navigate to the database that is linked to your project by expanding the small triangles to the side. Expand "Tables" Find the table named "dbo._EFMigrationsHistory". Right click on it and select "View Data" to see the table entries in Visual Studio. Delete the row corresponding to your migration that you want to unapply (Say "yes" to the warning, if prompted). Run "dotnet ef migrations remove" again in the command window in the directory that has the project.json file. Alternatively, run "Remove-Migration" command in the package manager console.

希望这有助于并适用于项目中的任何迁移…我只测试了最近的迁移…

编码快乐!