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

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

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"

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

有没有更简单的方法?


当前回答

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

PM> Update-Database -TargetMigration:"NameOfSecondToLastMigration"

或者使用您的迁移示例

Update-Database -TargetMigration:"CategoryIdIsLong"

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

其他回答

在EntityFrameworkCore:

Update-Database 20161012160749_AddedOrderToCourse

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

解决方案是:

Update-Database –TargetMigration 201609261919239_yourLastMigrationSucess

我运行我的(BASH GIT)控制台也运行实体框架核心。更新-数据库命令将无法在包控制台之外工作,我必须使用donet ef命令。

donet ef database update [Name of previous Migration]

这将运行当前迁移的protected override void Down(MigrationBuilder MigrationBuilder)方法和所有其他方法,以返回到您设置的DB版本。

我还使用-p[迁移项目]-s[项目解决方案]。这也允许它指向我的appsettings.[环境]。json,其中我的密码访问DB存储。

export ASPNETCORE_ENVIRONMENT=[ENVIORMENT]; donet ef database update [Name of previous Migration] -p [Migration Project Name] -s [Solution Name]

这些都是大家都知道的,但我想给大家一些细节以防你第一次做。

update-database 0

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

英孚的核心

更新数据库到上一个点

update-database CategoryIdIsLong

然后,去除不好的迁移

remove-migration