这看起来像一个真正的共同任务,但我不能找到一个简单的方法来做到这一点。
我想撤消上次应用迁移。 我本来期望一个简单的命令,比如
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的,你所描述的方法是首选方法。 一个解决方案是创建一个自动化上述步骤的包装PS脚本。 此外,随意为此创建一个功能请求,或者更好的是,采取射击在实现它! http://entityframework.codeplex.com/
我想澄清到此主题:
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)
在EntityFrameworkCore:
Update-Database 20161012160749_AddedOrderToCourse
其中20161012160749_AddedOrderToCourse
是要回滚到迁移的名称。
解决的办法是:
Update-Database –TargetMigration 201609261919239_yourLastMigrationSucess
额外提醒:
如果您有多个配置类型,您需要指定[ConfigurationName]
Update-Database -Configurationtypename [ConfigurationName] -TargetMigration [MigrationName]
在EF核心,你可以输入命令Remove-Migration
的包管理器控制台已将您的错误迁移之后。
控制台建议你这样做,如果您的迁移可能涉及数据丢失:
的操作被脚手架可能导致数据的丢失。 请检查是否有误迁移。 要撤消此操作,请删除迁移。
我使用EntityFrameworkCore和我用@MaciejLisCK答案。 如果你有多个数据库环境中,你也将需要通过添加上下文参数,例如指定上下文:
Update-Database 201207211340509_MyMigration -context myDBcontext
(其中201207211340509_MyMigration
是迁移要回滚到,并myDBcontext
是您的数据库上下文的名字)
update-database 0
This will roll back all migrations in EFCore