如何一次回滚多个 EF Core 迁移

How to rollback more than one EF Core migration at time

我在我的 C# 项目中使用 EF Core 2.2 作为 ORM,我有 8 个迁移,我想知道我是否可以回滚不仅是最后一个,还可以回滚更多一次回滚中的一个。

更新 1:

In other words, if I have n migrations, I want to apply the n - 2 or n - 3, I need to apply the n - m migration and not only the last one as the Remove-Migration

我的最终目标是创建一个 Powershell 脚本,这样我就可以像下面这样使用它:

RollbackTo [TagetProject] "TargetMigration"

prowershell 将采用两个参数:目标项目和要恢复的迁移。

update-database 之后,您将无法撤消它。但作为解决方法,有两种方法:

1.Look 在您应用的迁移中,其中有 2 个方法,Up 和 Down。复制下来的方法。然后添加迁移,粘贴你复制的部分。申请 update-database。为您想要的迁移执行此操作 undo.IMPORTANT:从上次迁移开始执行。

  1. 如果您不介意删除数据库,这是一种更清晰的方法。删除数据库。然后删除您不想应用的迁移(删除的迁移应该是最后一个,否则您可能会出错)。应用 update-database。您将获得所需的数据库。在您的情况下:从头开始一个接一个地应用迁移,直到您最终要应用的迁移。

解决方案是将数据库更新回所需的目标迁移:

dotnet ef database update "THE NAME OF THE TARGET MIGRATION"

多次执行此 Ef Core 命令,直到所需的迁移:

dotnet ef migrations remove

在我的 Powershell 脚本下方:

param (
    [Parameter(Mandatory=$true)][string]$migration,
    [Parameter(Mandatory=$true)][int]$nbr_removes
 )

 dotnet ef database update $migration

 for($i=0; $i -lt $nbr_removes; $i++) {
    dotnet ef migrations remove
    echo 'revert changes'
 }

我们可以像下面这样使用它:

.\rollback_to.ps1 2019081200218_AddScoreColumn 2