2016-11-08 42 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