2016-06-29 36 views
0

我承認此問題的來源可能在我身上,但我無法讓Entity Framework「恢復」。情況是我正在創建新的遷移,而實體框架未檢測到我的模型的所有更改。它檢測到一些(最新的),但不是以前的(沒有遷移)。Entity Framework遷移未檢測到所有更改

爲什麼它是這樣的,我是先對模型做了一些更改並創建了一個遷移。一切都很完美。然後我再次改變了模型,因爲它只在我的開發機器上,我刪除了以前的遷移並重新創建它。這是問題開始的地方。我知道我根本不應該刪除遷移,但是已經完成了。

我有代碼第一個數據庫,所以我決定覈實數據庫(LocalDB),nuke最新的遷移文件(沒有所有的變化)。然後更新數據庫並嘗試添加新的遷移。仍然不是所有的變化。

所以我在考慮EF會在模型的某個地方保留某種我看不到的快照。哪裏?任何想法如何從這種情況中恢復,並獲得EF重新創建與模型的缺少更改的遷移?

回答

1

正如您已經發現的那樣,EF會保留一個Hashcode來跟蹤遷移之間的模型更改。您可以通過查看數據庫中的[dbo].[__MigrationHistory]表來查看。

因此,您不應該只是簡單地刪除已經應用的遷移的.cs文件。相反,做到以下幾點:

1)使用回滾Update-Database -TargetMigration [Name of the migration right before the migration you want to delete]

2)刪除舊遷移的.cs文件原有的遷移

3)使用Add-Migration

添加新的遷移,我希望你仍然有刪除遷移.cs文件在某處,否則回滾將證明是有問題的:/如果從一個新的數據庫開始,只更新它到最後一次良好遷移(再次使用-TargetMigration參數)並從那裏開始。

+0

看來問題的主要原因是以前的遷移resx文件在存儲中有一個「無效的」目標散列。我恢復了原來的目標,然後按照你提到的步驟來實現它。 –

相關問題