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


当前回答

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

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

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

dotnet ef migrations remove

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

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

C:\Projects\Application

其他回答

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

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 ef database update <the-migration-you-want-to-recover>
dotnet ef migrations remove

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

Use:

CLI

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

包管理控制台

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

例子:

PM>更新数据库MyInitialMigration

然后尝试删除上次迁移。

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

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

首先执行以下命令:

PM>update-database -migration:0

然后运行这个:

PM>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