当我在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。


当前回答

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

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.

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

编码快乐!

其他回答

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

所有命令都将使用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>将数据库更新为指定的迁移(基本上是取消应用或恢复未选择的迁移)

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

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

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

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

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

简单地说,您可以通过值来确定迁移的目标

 Update-Database -Migration:0

然后继续并删除它

 Remove-Migration

说明该命令用于清空数据库。

要取消应用特定的迁移:

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

移除迁移

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

包管理控制台

点> remove-migration

CLI> dotnet ef迁移删除

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

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

恢复迁移

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

包管理控制台

更新数据库MyFirstMigration

CLI

. net ef数据库更新MyFirstMigration。

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

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