0

發佈的Web應用程序時,我建設有代碼優先遷移的ASP.NET MVC應用程序EF與SQL Azure的託管DB它Azure上。我第一次發表這個,它很好。但自那時以來,我的模型發生了變化,Azure數據庫中的模式未更新爲匹配。當我部署時,我確實已選中「執行代碼優先遷移」。當這不起作用時,我刪除了我的數據庫,然後在Azure門戶中重新創建它,認爲這會觸發它更新。但是,那沒有奏效,所以我在遷移配置中設置了AutomaticMigrationsEnabled = True。它仍然沒有工作,所以目前我在Azure中的數據庫沒有任何表。如何才能讓Azure中的數據庫被迫更新以匹配我的模型,以便發佈的網站能夠正常工作?我曾嘗試尋找是否有辦法將VS本地數據庫編寫爲Create查詢並在SQL管理工作室中執行該查詢,但無法找到如何執行此操作的方法。模式不更新從Visual Studio

+0

您是否嘗試在部署後運行應用程序?這就是遷移的開始時間(不是在部署過程中)。請參閱[這裏](https://docs.microsoft。COM/EN-US/ASPNET/MVC /概述/工具入門/工具入門與 - 使用-EF-MVC /遷移和部署,與-的實體框架式-AN-ASP-NET- MVC的應用程序)。如果需要,可以用'update-database -Script'生成一個腳本。 –

+0

VS在部署完成後自動啓動網站...所以是的,我之後運行了它。起初(在刪除數據庫之前),它會開始很好,但是在導航到使用新字段的頁面時,我會遇到錯誤。我嘗試了「update-database -Script」,但它給了我一個_MigrationHistory的插入查詢(這是我看到的在我嘗試過的其他所有東西之後在數據庫中添加的唯一東西)。 – Andarta

回答

0

如果您確定在發佈設置中選擇了update database,並且連接字符串是正確的並且它仍然沒有更新。也許下面將幫助您:

我有時會收到類似這樣的問題,這是很令人沮喪,我發佈的文件是正確的,我的設置被設置爲允許發佈過程中出現SQL更新。但有時候數據庫還沒有更新,我得到了一個很好的「支持上下文已經改變」的錯誤,有時候罪魁禍首就是沒有更新過的遷移表。不幸的是,讓數據庫同步的唯一可靠方法是通過比較[dbo].[__MigrationHistory]

來檢查它們都在哪個遷移歷史記錄。如果您發佈的服務器缺少最新的遷移歷史記錄,那麼您可以通過比較生成一個SQL腳本輸入到包管理器控制檯:

Update-Database -Script -TargetMigration [migration name]

「遷移名」應該是最後遷移您發佈的服務器有,Visual Studio將生成可以用來將數據庫的SQL腳本名稱直到目標遷移的最新遷移。

有時(雖然很少,它只發生一次或兩次)上述不起作用,無論出於何種原因(通常是因爲遷移文件已被刪除),如果是這樣的話,那麼它是一個好主意腳本整個數據庫和櫻桃選擇你需要的SQL。

Update-Database -Script -SourceMigration:0

,這將產生對每個遷移腳本,然後你可以挑櫻桃根據您所做的更改。 '最新'的變化將更接近文件的底部。每次的遷徙變化將有如果檢查開始:

IF @CurrentMigration < '201710160826338_mymigration' BEGIN

你可以用它來選擇您所需,如果你挑選SQL一定要包括更新遷移歷史的位。這將是在IF塊的末尾,是這個樣子:

INSERT [dbo].[__MigrationHistory]([MigrationId], [ContextKey], [Model], [ProductVersion]) VALUES (N'201710101645265_test', N'API.Core.Configuration', 'Some long checksum')

包括遷移歷史將確保Visual Studio中不會再有問題。

希望這會有所幫助。