如何使用 EF Core 整合迁移?

How do I consolidate migrations using EF Core?

我有这些迁移:

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

我想将 FooBaz 整合到一个新迁移中。我知道如何在 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() 方法是空的。

我做错了什么?

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

除了手动删除文件,您还可以 运行 dotnet ef migrations remove 多次,但它足够智能,可以检测到手动删除的迁移。

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

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

创建合并

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