從存儲庫部署ASP.NET Core Web App + SQL

asp.net-core azure c# entity-framework-core sql-server

我正在使用Visual Studio編寫本教程, ASP.NET核心和實體框架核心入門 ,我想從GitHub存儲庫將其部署到Azure。在Azure中使用“Web App + SQL”我可以成功部署一次,但是當我對數據庫進行更改並重新部署時,我收到錯誤,“應用現有遷移可能會解決此問題...”

那麼,在使用新遷移重新部署應用程序時,是否可以通過某種方式觸發數據庫更新?

請注意,我知道有很多方法可以直接從Visual Studio部署和管理這樣的應用程序,但我想學習如何從存儲庫中執行此操作。

注意:我發現了類似的問題 ,我嘗試將context.Database.Migrate()添加到DbInitializer.Initialize(context);下面的Startup.cs的Configure方法中DbInitializer.Initialize(context);當我在我的機器上運行它時沒有出現問題,但是當我部署它時,我得到“500內部服務器錯誤:啟動應用程序時出錯”。

一般承認的答案

我嘗試將context.Database.Migrate()添加到DbInitializer.Initialize(context)下面的Startup.cs的Configure方法中;當我在我的機器上運行它時沒有出現問題,但是當我部署它時,我得到“500內部服務器錯誤:啟動應用程序時出錯”。

根據您的描述,我按照您提到的教程來測試此問題。我在本節中添加了DbInitializer.cs ,並在Startup.cs Configure方法下添加了context.Database.Migrate() ,如下所示:

DbInitializer.Initialize(context);
context.Database.Migrate();

我為Student類添加了一個名為IdNo的新屬性,然後啟動了Web應用程序,我可能會遇到以下錯誤:

在此處輸入圖像描述

注意:如果Students表沒有任何記錄, DbInitializer.cs會添加feed記錄,然後我遇到上述錯誤。

以下是DatabaseFacade.EnsureCreated()DatabaseFacade.Migrate()的摘要:

DatabaseFacade.EnsureCreated()

確保上下文的數據庫存在。如果存在,則不採取任何措施 。如果它不存在,則創建數據庫及其所有模式。如果數據庫存在,則不會努力確保它與此上下文的模型兼容。 請注意,此API不使用遷移來創建數據庫 。此外,以後無法使用遷移更新創建的數據庫。 如果要定位關係數據庫並使用遷移,則可以使用DbContext.Database.Migrate()方法確保創建數據庫並應用所有遷移。

DatabaseFacade.Migrate()

將上下文的任何掛起的遷移應用於數據庫。如果數據庫尚不存在,將創建它。請注意, 此API與DbContext.Database.EnsureCreated()互斥 。 EnsureCreated不使用遷移來創建數據庫,因此以後無法使用遷移更新創建的數據庫。

根據您的方案,您需要利用遷移功能來更新數據庫架構。眾所周知,EF Core不支持自動遷移,你可以遵循這個類似的情況和這個git 問題 。您可以在DbInitializer.cs使用context.Database.Migrate()而不是context.Database.EnsureCreated() ,並通過add-migration手動添加遷移文件,並將創建的遷移文件提交到GitHub存儲庫。

在此處輸入圖像描述

注意:您需要在DbInitializer.cs中處理種子數據,以避免插入相同的記錄。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow