EF迁移:回滚最后应用迁移?(EF Migrations: Rollback last applie

2019-06-26 23:19发布

这看起来像一个真正的共同任务,但我不能找到一个简单的方法来做到这一点。

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

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"

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

有没有更简单的方法?

Answer 1:

由于EF 5.0的,你所描述的方法是首选方法。 一个解决方案是创建一个自动化上述步骤的包装PS脚本。 此外,随意为此创建一个功能请求,或者更好的是,采取射击在实现它! http://entityframework.codeplex.com/



Answer 2:

我想澄清到此主题:

Update-Database -TargetMigration:"name_of_migration"

什么,你在上面做的是说,你想,直到你留下指定迁移回滚所有迁移。 因此,如果你使用GET的迁移,你会发现,你有A,B,C,d和E,然后使用这个命令将回滚E和d让你C:

Update-Database -TargetMigration:"C"

此外,除非任何人都可以向相反的意见,我注意到,你可以用一个序号值和短 - 目标交换机(因此, - 目标是一样的-TargetMigration)。 如果你想回滚所有迁移,并开始了,你可以使用:

update-database -target:0

0,上面会回滚甚至第一迁移( 这是一个破坏性的命令-要确保你知道你在做什么,然后再使用它 ) -的东西,如果你使用上面的语法,你不能做需要的名字目标迁移(应用迁移前的第0迁移的名称不存在!)。 因此,在这种情况下,你必须使用0(有序)值。 同样地,如果已应用迁移A,B,C,d,和E(以该顺序),则顺序1应该是指A,序数2应该是指B,等等。 因此,回滚到B您可以使用两种:

Update-Database -TargetMigration:"B"

要么

Update-Database -TargetMigration:2

编辑2019年1月:

据该相关答案上类似的问题,正确的参数名称是-Target (对于EF核心1.1)或-Migration (用于EF核2.0)



Answer 3:

EntityFrameworkCore:

Update-Database 20161012160749_AddedOrderToCourse

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



Answer 4:

解决的办法是:

Update-Database –TargetMigration 201609261919239_yourLastMigrationSucess


Answer 5:

额外提醒:

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

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


Answer 6:

在EF核心,你可以输入命令Remove-Migration的包管理器控制台已将您的错误迁移之后。

控制台建议你这样做,如果您的迁移可能涉及数据丢失:

的操作被脚手架可能导致数据的丢失。 请检查是否有误迁移。 要撤消此操作,请删除迁移。



Answer 7:

我使用EntityFrameworkCore和我用@MaciejLisCK答案。 如果你有多个数据库环境中,你也将需要通过添加上下文参数,例如指定上下文:

Update-Database 201207211340509_MyMigration -context myDBcontext

(其中201207211340509_MyMigration是迁移要回滚到,并myDBcontext是您的数据库上下文的名字)



Answer 8:

update-database 0

This will roll back all migrations in EFCore


文章来源: EF Migrations: Rollback last applied migration?