專案在本地作業,但在發布時回傳啟動錯誤。應用程式啟動例外:

標準輸出回傳
應用程式啟動例外:System.Data.Entity.Migrations.Infrastructure.AutomaticDataLossException:未應用自動遷移,因為它會導致資料丟失。在 DbMigrationsConfiguration 上將 AutomaticMigrationDataLossAllowed 設定為“true”,以允許應用自動遷移,即使它們可能會導致資料丟失。或者,使用帶有“-Force”選項的 Update-Database,或構建顯式遷移。在 System.Data.Entity.Migrations.DbMigrator.AutoMigrate(字串 migrationId,VersionedModel sourceModel,VersionedModel targetModel,布爾降級)
我已經使用了 Update-Database -Force,成功但沒有積極的結果和錯誤繼續(資料庫已完全更新)
有沒有人遇到過這個問題或類似的問題?
uj5u.com熱心網友回復:
專案在本地作業,但在發布時回傳啟動錯誤。
Release如果您的配置沒有相同的資料庫連接字串,這很常見。如果您希望發布版本使用相同的資料庫,即您一直在除錯的資料庫,請檢查您的發布版本的輸出檔案夾中是否沒有不同的組態檔。
未應用自動遷移,因為它會導致資料丟失。
這表明兩件事:
- 您正在使用自動遷移,而不是顯式遷移
- 所需的架構更改是洗掉表、列、外鍵
- 另一種常見的資料丟失情況是重命名表或列時。如果 EF 沒有將更改檢測為重命名,而是實作了洗掉和創建邏輯,這仍然是第二個問題。
(如例外訊息中所述)理想的解決方案是使用顯式遷移,這樣您就可以為可能導致資料丟失的特定版本實作自己的自定義遷移邏輯。對于這個特定的模式版本,您可能只需要一個顯式遷移。
在重構涉及多個更改的操作之后,潛在的重命名操作可能不明確或根本沒有檢測到。在顯式遷移中,您可以使用重命名操作替換洗掉和重新創建邏輯,您還可以更改洗掉和添加/創建的順序以允許您添加新列或表,然后添加 SQL 陳述句以從中遷移資料舊實作到新實作,然后在減輕資料丟失后執行 drop 陳述句。
使用該-Force選項并不總是有效。它將允許您繞過警告,但它不會幫助 SQL 執行將違反資料庫模式約束。要進一步除錯如果-Force不起作用,請捕獲詳細輸出以分析導致行程失敗的最后一條 SQL 陳述句:
Update-Database -Force -Verbose
其他解決方法:
- 手動洗掉生產資料庫,這將導致重新創建架構以匹配您的 EF 資料模型。這當然會導致資料完全丟失,因此它僅適用于基本上首次或 OOTB 應用程式部署。
- 手動洗掉有問題的架構元素
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/514883.html
標籤:C#。网实体框架移民
