这看起来是一个非常普通的任务,但我找不到一个简单的方法来做。

我想撤消上一次应用的迁移。我本以为会有个简单的命令,比如

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"

(至少我可以只使用名称,跳过时间戳…)

有没有更简单的方法?


当前回答

额外提示:

如果您有多种配置类型,您需要指定[ConfigurationName]

Update-Database -Configurationtypename [ConfigurationName] -TargetMigration [MigrationName]

其他回答

截至EF 5.0,您描述的方法是首选的方法。所以

PM> Update-Database -TargetMigration:"NameOfSecondToLastMigration"

或者使用您的迁移示例

Update-Database -TargetMigration:"CategoryIdIsLong"

一种解决方案是创建一个包装器PS脚本,自动执行上述步骤。此外,您可以为此创建一个特性请求,或者更好的是尝试实现它!https://github.com/dotnet/ef6

我发现当在包管理器控制台中运行时,这是有效的:

dotnet ef migrations list | select -最后2 | select -第1 | ForEach-Object {Update-Database -Migration $_}

您可以创建一个脚本来简化它。

英孚的核心

PM>更新数据库yourMigrationName

(还原迁移)

点> - database就

为我工作

在这种情况下,原来的问题 (yourMigrationName = CategoryIdIsLong)

我想对这个帖子做一些澄清:

Update-Database -TargetMigration:"name_of_migration"

上面所做的就是回滚所有的迁移,直到剩下指定的迁移为止。因此,如果你使用get - migrations,你发现你有A, B, C, D和E,那么使用这个命令将回滚E和D,让你到C:

Update-Database -TargetMigration:"C"

此外,除非有人有相反的意见,否则我注意到您可以使用序数值和短的-Target开关(因此,-Target与-TargetMigration相同)。如果你想要回滚所有的迁移并重新开始,你可以使用:

Update-Database -Target:0

0, above, would rollback even the FIRST migration (this is a destructive command--be sure you know what you're doing before you use it!)--something you cannot do if you use the syntax above that requires the name of the target migration (the name of the 0th migration doesn't exist before a migration is applied!). So in that case, you have to use the 0 (ordinal) value. Likewise, if you have applied migrations A, B, C, D, and E (in that order), then the ordinal 1 should refer to A, ordinal 2 should refer to B, and so on. So to rollback to B you could use either:

Update-Database -TargetMigration:"B"

or

Update-Database -TargetMigration:2

2019年10月编辑:

根据类似问题的相关回答,EF Core 1.1正确的命令是-Target, EF Core 2.0正确的命令是-Migration。

update-database 0

警告:这将回滚EFCore中的所有迁移!请小心使用:)