EF迁移:回滚上次应用的迁移?

这看起来像一个非常常见的任务,但我找不到一个简单的方法来做到这一点。

我想撤消上次应用的迁移。 我会期待一个简单的命令,比如

PM> Update-Database -TargetMigration:"-1" 

相反,我所能想到的是:

 PM> Get-Migrations Retrieving migrations that have been applied to the target database. 201208012131302_Add-SystemCategory 201207311827468_CategoryIdIsLong 201207232247409_AutomaticMigration 201207211340509_AutomaticMigration 201207200025294_InitialCreate PM> Update-Database -TargetMigration:"CategoryIdIsLong" 

(至less我可以使用名字,跳过时间戳…)

有更容易的方法吗?

从EF 5.0开始,您所描述的方法是首选的方法。 一个解决scheme是创build一个封装PS脚本,自动执行上述步骤。 此外,请随时为此创buildfunction请求,或者更好地实施此function! http://entityframework.codeplex.com/

我想添加一些澄清到这个线程:

 Update-Database -TargetMigration:"name_of_migration" 

你上面做的是说你要回滚所有的迁移,直到你留下了指定的迁移。 因此,如果您使用GET-MIGRATIONS并且您发现您有A,B,C,D和E,则使用此命令将回滚E和D以使您到达C:

 Update-Database -TargetMigration:"C" 

此外,除非任何人可以相反的意见,我注意到,你可以使用序数值和短目标开关(因此, – 目标是相同的 – 目标迁移)。 如果你想回滚所有的迁移并重新开始,你可以使用:

 update-database -target:0 

0,即使是FIRST迁移也会回滚( 这是一个破坏性的命令 – 在使用它之前,确保你知道你在做什么! ) – 如果你使用上面的语法需要目标迁移(在迁移应用之前,第0迁移的名称不存在!)。 所以在这种情况下,你必须使用0(有序)值。 同样,如果您已经应用迁移A,B,C,D和E(按照该顺序),则序数1应该参考A,序数2应该参考B等等。 所以要回滚到B你可以使用:

 Update-Database -TargetMigration:"B" 

要么

 Update-Database -TargetMigration:2 

EntityFrameworkCore中

 Update-Database 20161012160749_AddedOrderToCourse 

其中20161012160749_AddedOrderToCourse是要回滚到的迁移名称。

解决scheme是:

 Update-Database –TargetMigration 201609261919239_yourLastMigrationSucess