实体框架-重新开始-撤消/回滚所有迁移


168

由于某种原因,我的迁移似乎混乱,损坏/不计其数。我正好要重新开始,是否有一种方法可以完全撤消所有迁移,清除历史记录并删除迁移代码,所以回到正题吗?

例如)PM> Disable-MigrationsRollback-Migrations

我不想“更新”到原始迁移步骤(如InitialSchema目标),因为我找不到了。

Answers:


358

您可以使用以下方法回滚到任何迁移:

Update-Database -TargetMigration:"MigrationName"

如果要回滚所有迁移,可以使用:

Update-Database -TargetMigration:0

或同等学历:

Update-Database -TargetMigration:$InitialDatabase 

在某些情况下,您还可以删除数据库和所有迁移类。


6
和往常一样,你是最好的。
drzaus 2012年

2
我不明白,OP 明确表示“我不想“更新”到原始迁移步骤(例如,类似于InitialSchema目标),因为我找不到了。这个答案如何满足他的要求?我期望会发生的事情是我将不得不enable-migrations再次处于这种状态。这些显然是有帮助的,但是它们完成了OP的要求吗?(请不要回答“嗯,他接受了答案。”我试图理解这一点,而不是成为一个聪明人。)
迈克尔·布莱克本

@MichaelBlackburn:如果您想enable-migrations再次运行,并且正在从头开始开发数据库,​​则只需遵循最后一句话:删除数据库和所有与迁移相关的代码。如果您开始对现有数据库使用迁移,则首先必须使用第二个或第三个命令还原所有迁移,然后删除MigrationHistory表和所有与迁移相关的代码。它应该使您到达起始位置。您也可以从备份中获取启动数据库(使用迁移之前),并删除所有与迁移相关的代码。
Ladislav Mrnka

4
@MichaelBlackburn:我的意思是我看到的所有其他解决方案都告诉您将其更新回您的第一个命名迁移,但是我的问题是没有一个初始的干净迁移来更新(回溯)到-我只是希望摆脱所有迁移,无论采用哪种方法。因此,这个答案以-TargetMigration:0
drzaus


8

要明确的是,如果使用LocalDb,则要从头开始时,只需通过数据库资源管理器删除数据库,然后enable-migrations -force在“程序包管理器控制台”中键入。不要通过App_Data文件夹删除数据库,否则将出现以下问题


2
这样做时要小心,因为它将覆盖您的Migrations \ Configuration.cs而不会发出警告!
cgatian

感谢您的警告,过了一会儿我几乎首先删除了代码,很高兴一次就可以放置所有代码,对数据库本身进行了源代码控制版本控制,但是我没有看到其他任何大的好处并先切换回数据库。我使用Red Gate Sql Compare跟踪所有增量。
Brian Ogden 2014年


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.