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

Entity framework core 如何一次回滚多个EF Core迁移,entity-framework-core,entity-framework-migrations,Entity Framework Core,Entity Framework Migrations,我在我的C项目中使用EF Core 2.2作为ORM,我有8次迁移,我想知道我是否可以在一次回滚中不仅回滚最后一次迁移,而且回滚多个迁移 更新1: 换句话说,如果我有n个迁移,我想应用n-2或n -3,我需要应用n-m迁移,而不仅仅是最后一个作为删除迁移 我的最终目标是创建一个Powershell脚本,以便像下面这样使用它: RollbackTo [TagetProject] "TargetMigration" .\rollback_to.ps1 2019081200218_AddScoreC

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

更新1:


换句话说,如果我有n个迁移,我想应用n-2或n -3,我需要应用n-m迁移,而不仅仅是最后一个作为删除迁移

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

RollbackTo [TagetProject] "TargetMigration"
.\rollback_to.ps1 2019081200218_AddScoreColumn 2
prowershell将采用两个参数:目标项目和要还原的迁移。

更新数据库后,您无法撤消它。但作为解决办法,有两种方法:

1.看看您应用的迁移,其中有两种方法,向上和向下。复制下来的方法。然后添加移植,粘贴复制的零件。应用更新数据库。对要撤消的迁移执行此操作。重要提示:从上次迁移开始执行此操作

如果您不介意删除数据库,则使用更清晰的方法。删除数据库。然后删除不想应用的迁移。删除的迁移应该是最后一个迁移,否则可能会出错。应用更新数据库。您将获得所需的数据库。在您的情况下:从一开始就一个接一个地应用迁移,直到您最终想要应用的迁移。
解决方案是将数据库更新回所需的目标迁移:

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'
 }
我们可以像下面这样使用它:

RollbackTo [TagetProject] "TargetMigration"
.\rollback_to.ps1 2019081200218_AddScoreColumn 2

你说的回滚是什么意思?因为updatedatabase-Migration Name命令正是这样做的——将数据库回滚到迁移名称之后的状态。如果您想删除迁移,那就另当别论了。我想一次性删除两个迁移,并将数据库更新到目标迁移。换句话说,如果我有n个迁移,我想应用n-2或n-3,我需要应用n-m迁移,而不是像Remove迁移那样只应用最后一个迁移。Update-Database命令执行数据库部分。对于remove部分,我不知道,您可以查看remove Migration命令源代码或它使用的任何开源代码。我希望最终目标是编写一个Powershell脚本,这样我就可以编写类似以下内容:回滚到[TagetProject]TargetMigration