我遇到了一個問題,我收到錯誤「上下文已更改,因爲數據庫已創建」,但是當我查看遷移歷史記錄表時它是最新的遷移。這是一個測試站點,所以我使用運行此命令「Update-Database -Script -SourceMigration:$ InitialDatabase」得到的sql腳本更新了數據庫。我不能只刪除整個數據庫並重新創建它。有沒有人遇到過類似的問題?目前,我正在使用EF 6.1.3。獲取EF上下文已更改錯誤後更新站點
注:我爲此使用了代碼優先,所以它不是我添加的現有數據庫。
我遇到了一個問題,我收到錯誤「上下文已更改,因爲數據庫已創建」,但是當我查看遷移歷史記錄表時它是最新的遷移。這是一個測試站點,所以我使用運行此命令「Update-Database -Script -SourceMigration:$ InitialDatabase」得到的sql腳本更新了數據庫。我不能只刪除整個數據庫並重新創建它。有沒有人遇到過類似的問題?目前,我正在使用EF 6.1.3。獲取EF上下文已更改錯誤後更新站點
注:我爲此使用了代碼優先,所以它不是我添加的現有數據庫。
問題是由於域名被更改而爲該站點創建了一個新目錄。我知道域名已經改變,但沒有意識到物理目錄已經改變。這是我在檢查應用程序路徑時發現的一個輕微變化(已刪除)。所以問題是由pebkac引起的(鍵盤和椅子之間存在問題)。
嘗試在DbContext類的構造函數中將Initializer設置爲null。
像這樣:
Database.SetInitializer<YourDbContext>(null);
ScottGu的博客解釋了爲什麼發生這種情況:
http://weblogs.asp.net/scottgu/using-ef-code-first-with-an-existing-database
我使用代碼優先創建了這個數據庫,所以我不相信ScottGu的文章與此相關。據我所知,代碼和數據庫都應該使用相同的遷移,但是我得到了上面提到的錯誤。有些東西不同步,不知道是什麼。 – Wade73
您是否嘗試過使用此命令,而不是執行腳本?
更新,數據庫-Force
如果啓用自動遷移,這應該拿起你的代碼優先的變化和部署。該力量將允許有數據的列被丟棄等。
sql服務器位於我無法從我的開發機器(我是分包商)訪問的服務器上。所以我需要通過ftp上傳文件,然後用rdp中的sql腳本更新數據庫。 – Wade73
去看看我的答案在這裏。這一定會對你有所幫助。 REDGATE的人們對這個問題有很好的工具。我希望微軟也會創建一個。 http://stackoverflow.com/a/28084105/3777098 – alikuli