【问题标题】:How do I consolidate migrations using EF Core?如何使用 EF Core 整合迁移?
【发布时间】:2016-11-08 10:02:18
【问题描述】:

我有这些迁移:

00000000000000_First
20161101000000_Foo
20161102000000_Bar
// ...many many MANY more
20161108000000_Baz

我想从 Foo 合并到 Baz 到一个新的迁移中。我知道如何在 EF 中做到这一点,但在 EF Core 中不知道。

我试过了:

dotnet ef update database 00000000000000_First
// delete all other migration classes
dotnet ef migrations add Consolidated
dotnet ef update

我希望新的Consolidated 迁移将包含对模型的所有更改。但是它的Up()Down() 方法是空的。

我做错了什么?

【问题讨论】:

  • 我找到了一个 hacky 解决方案:手动编辑 ContextModelSnapshot 类,删除所有新内容,然后添加合并迁移。但一定有更好的办法。

标签: entity-framework entity-framework-core entity-framework-migrations


【解决方案1】:

你少了一步。由于是新模型快照,在您手动删除迁移文件后,您需要运行 dotnet ef migrations remove(或 PMC 中的 Remove-Migration)使其恢复同步。

您也可以多次运行dotnet ef migrations remove,而不是手动删除文件,但它足够聪明,可以检测手动删除的迁移。

【讨论】:

  • 我不跟随,我的第一步是将数据库回滚到第一次迁移 - dotnet ef update database First。是这个意思吗?
  • 抱歉,我的意思是dotnet ef migrations remove
【解决方案2】:

EF Core 在执行ef migrations add 时不会查看真实数据库。仅使用您的代码(以及Migrations 文件夹中的数据库模型快照)。

因此,您需要从迁移文件夹中删除迁移(多次使用 dotnet ef migrations remove),然后使用 ef migrations add 创建合并。

关于你的真实数据库——如果你也想回滚它,你应该在删除迁移之前运行ef database update XXX。或者,如果您要折叠所有迁移 - 您可以完全删除数据库,然后从新迁移重新创建。

【讨论】:

  • 我明白了,谢谢。顺便说一句,@bricelam 迁移“足够聪明,可以检测到手动删除的迁移”,所以也许你甚至不需要运行 remove 并删除迁移文件。
猜你喜欢
  • 2019-03-20
  • 2021-11-23
  • 2021-07-15
  • 2022-11-11
  • 2020-10-02
  • 2018-10-02
  • 2016-11-06
  • 1970-01-01
  • 2015-10-21
相关资源
最近更新 更多