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

Posted

技术标签:

【中文标题】实体框架 - 重新开始 - 撤消/回滚所有迁移【英文标题】:Entity Framework - Start Over - Undo/Rollback All Migrations 【发布时间】:2012-05-04 04:22:01 【问题描述】:

由于某种原因,我的迁移似乎已经混乱/损坏/无论如何。我现在只想重新开始,那么有没有办法完全撤消所有迁移,擦除历史记录并删除迁移代码,所以我又回到了原点?

例如)PM> Disable-MigrationsRollback-Migrations

我不想“更新”到原始迁移步骤(即类似于 InitialSchema 目标的东西),因为我再也找不到它了。

【问题讨论】:

【参考方案1】:

您可以使用以下命令回滚到任何迁移:

Update-Database -TargetMigration:"MigrationName"

如果您想回滚可以使用的所有迁移:

Update-Database -TargetMigration:0

或同等的:

Update-Database -TargetMigration:$InitialDatabase 

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

【讨论】:

一如既往,你是最棒的。 我不明白,OP 具体来说说“我不想“更新”到原始迁移步骤(即类似于 InitialSchema 目标),因为我再也找不到了。”这个答案如何做到他想要的?我期望发生的是,我将处于必须再次enable-migrations 的状态。这些显然很有帮助,但是它们是否完成了 OP 的要求? (请不要回复“好吧,他接受了答案。”我试图理解这一点,而不是一个聪明人)。 @MichaelBlackburn:如果你想再次运行enable-migrations,并且你正在从头开发数据库,​​你只需要按照最后一句话:删除数据库和所有迁移相关的代码。如果您开始对现有数据库使用迁移,则首先必须使用第二个或第三个命令还原所有迁移,然后删除 MigrationHistory 表和所有与迁移相关的代码。它应该让你到达起始位置。您还可以从备份中启动数据库(在使用迁移之前)并删除所有与迁移相关的代码。 @MichaelBlackburn:我的意思是我看到的所有其他解决方案都告诉您更新回您的第一个 named 迁移,但我的问题是没有t 初始 clean 迁移以更新(返回)到 - 我只是想摆脱所有迁移,不管方法如何。因此,这个答案解决了我对-TargetMigration:0 的担忧【参考方案2】:

对于实体框架核心:

Update-Database -Migration:0
Remove-Migration

【讨论】:

【参考方案3】:

需要明确的是,如果使用 LocalDb,当您想从头开始时,只需通过数据库资源管理器删除数据库,然后在包管理器控制台中键入 enable-migrations -force。不要通过 App_Data 文件夹删除数据库,否则您将拥有以下issue。

【讨论】:

这样做时要小心,因为它会在没有警告的情况下覆盖您的 Migrations\Configuration.cs! 感谢您的警告,一段时间后我几乎第一次放弃了代码,很高兴将所有代码集中在一起,放置,为您的数据库本身提供源代码控制版本控制,但我没有看到任何其他大的好处,并首先切换回数据库。我使用 Red Gate Sql Compare 跟踪所有增量。【参考方案4】:
Update-Database -Migration 0
Remove-Migration

文档在这里:https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/powershell#update-database 在这里:https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/powershell#remove-migration

【讨论】:

【参考方案5】:

我猜他们的文档写错了,我用过

Update-Database -Target MigrationName

【讨论】:

以上是关于实体框架 - 重新开始 - 撤消/回滚所有迁移的主要内容,如果未能解决你的问题,请参考以下文章

撤消实体框架实体中的更改

如何使用 .net 核心实体框架迁移更新表(而不是重新创建它们)

如何使用实体框架回滚迁移的正确方法

实体框架迁移重命名表和列

实体框架代码在数据库迁移后首先回滚

实体框架代码优先迁移 - 我可以针对以前的迁移