2016-11-08 45 views
2

我有这些迁移:如何整合使用EF Core的迁移?

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()方法是空的。

我在做什么错?

+1

我发现了一个hacky解决方案:手动编辑'ContextModelSnapshot'类,删除所有新东西,然后添加合并迁移。但是一定有更好的办法。 – grokky

回答

3

你错过了一步。由于新车型的快照,你手动删除迁移文件后,你需要(在PMC或Remove-Migration)运行dotnet ef migrations remove把它找回来同步。

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

+0

我不明白,我的第一个步骤是回滚分贝第一迁移 - 'DOTNET EF更新数据库First'。你是这个意思吗? – grokky

+0

哦,对不起,我的意思是'dotnet ef migrations remove' – bricelam

1

EF核心,执行ef migrations add时,不考虑实际的数据库。只使用您的代码(和Migrations文件夹中的数据库模型快照)。

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

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

+0

我现在明白了,谢谢。顺便说一下,根据@bricelam migrations的“足够聪明,可以检测手动删除的迁移”,所以也许你甚至不需要运行“remove”,只是删除迁移文件。 – grokky