2015-03-03 45 views
2

好吧,讓我瞭解一些背景。我正在重建一箇舊的MVC3站點。我有最近的數據庫第一MVC5 EF6項目與我想使用相同的UI包。我複製了現有的項目並剝離了幾乎所有項目(所有項目特定的POCO模型,DbContext,Views等),基本上我只是將新的Identity物件與我的UI Framework一起留在那裏。EF6數據庫優先 - EF試圖創建我的數據庫(但所有的表已經存在)

我創建了腳本來手動將我的數據庫從SQLMembership轉換爲Identity 2.0(以及用於密碼轉換的一小段代碼)。一切都很好,它編譯,我可以作爲一個現有的用戶登錄。

下一步,我創建了一個新的臨時項目(我不想搞亂實際的項目命名空間),從新數據庫爲所有現有表生成POCO模型,將它們複製到我的項目中,只需手動編寫DataModel Fluent API代碼即可。我在模型生成方面有幾個驗證錯誤,我沒有問題。但是現在,當試圖執行任何可以訪問__MigrationHistory已存在的DataModel的任何錯誤時,我都會遇到異常錯誤。

查看EF SQL調試輸出的進一步調查顯示,它試圖運行腳本來創建我的數據庫中的所有表,它最終會在嘗試創建__MigrationHistory表時發出錯誤,因爲它已經存在(儘管我應該注意它沒有記錄)。

那麼我在做什麼不同呢? EF如何知道不會在我的其他項目中工作正常,並且在DataModel結構和POCO Model結構方面與我的新項目相同?我該怎麼做才能解決它?我知道我可以製作自己的初始化程序(How can I disable the use of the __MigrationHistory table in Entity Framework 4.3 Code First?),但我更願意理解正在發生的事情並修復源代碼而不是代碼。

回答

3

刪除項目中現有的Migrations文件夾。從現有數據庫中刪除表「__MigrationHistory」。現在你可以重建這個歷史表:

PM> enable-migrations 
PM> add-migration Initial -IgnoreChanges 
PM> update-database 

-IgnoreChanges創建空向上()方法,它不會對現有對象的任何更改。

+0

謝謝VahidN這確實奏效。一些筆記;我沒有原始的Migrations文件夾。在運行這些命令以試圖弄清楚發生了什麼之後,我刪除了新創建的Migrations文件夾,並刪除了在新的__MigrationsHistory表中創建的記錄。所以,據我所知,一切都恢復到與我以前運行這些命令相同的狀態,但現在一切都如預期的那樣正常工作。那麼還發生了什麼?任何更多的信息或鏈接,你可以提供,所以我可以理解更多,將不勝感激。再次感謝你的幫助。 – Josh 2015-03-03 21:03:51

+2

「MigrationHistory」表包含域模型的散列值以及數據庫中的現有表。如果您更改了某個模型,則EF可以再次計算該散列,並將其與「MigrationHistory」表中的舊值進行比較,然後再次更新數據庫。但是,如果手動更改數據庫,它會發現數據庫中的某些內容已更改,因爲哈希值不同,但這次它不知道如何解決此衝突。因此,在代碼優先方法中,不要嘗試像數據庫優先方法那樣行爲/設計。 – VahidN 2015-03-04 06:06:34

相關問題