共用方式為


教學課程:使用 Azure SQL 資料庫將 ASP.NET 應用程式部署至 Azure

Azure App Service 可提供可高度擴充、自我修復的 Web 主控服務。 本教學課程示範如何在 App Service 中開發資料驅動的 ASP.NET 應用程式,並將它連線到Azure SQL Database

完成本教學課程時,您會有一個 ASP.NET 應用程式連線到在 Azure 中執行的 Azure SQL 資料庫。 下列範例顯示應用程式介面。

顯示 Azure App Service 中已發佈 ASP.NET 應用程式的螢幕快照。

在本教學課程中,您會:

  • 將數據驅動的 Web 應用程式發佈至 Azure。
  • 建立 Azure SQL 資料庫來保存應用程式數據。
  • 將 ASP.NET 應用程式連線到 Azure SQL 資料庫。
  • 設定資料庫連線的受控識別和Microsoft Entra ID 驗證。
  • 更新數據模型並重新部署應用程式。
  • 將應用程式記錄從 Azure 串流至 Visual Studio。

先決條件

  • 如果您沒有 Azure 帳戶,請在開始之前建立 免費帳戶
  • 安裝 Visual Studio 2022,以及 ASP.NET 與 Web 開發Azure 開發工作負載。
    • 您可以選取 [Visual Studio 工具] 功能表中的 [取得工具和功能],將工作負載新增至現有的Visual Studio 安裝。
    • 選取 [ 說明>檢查更新 ],並視需要安裝最新版本,確定您有Visual Studio 2022的最新更新。

建立並執行應用程式

範例專案包含使用 Entity Framework Code First 的基本 ASP.NET MVC create-read-update-delete (CRUD) 應用程式。

  1. 下載 範例專案 並擷 取dotnet-sqldb-tutorial-master.zip 檔案。

  2. 在 Visual Studio 中開啟擷取的 dotnet-sqldb-tutorial-master/DotNetAppSqlDb.sln 檔案。

  3. F5 以執行應用程式,並在您的預設瀏覽器中開啟它。

    附註

    如有必要, 請安裝任何遺漏的 NuGet 套件

  4. 在應用程式中,選取 [ 新建 ] 並建立幾個 to-do 專案。

    顯示 ASP.NET Web 應用程式的螢幕快照。

  5. 測試 [編輯]、[詳細資料] 和 [刪除] 連結。

將應用程式發佈至 Azure

若要將應用程式發佈至 Azure,您可以建立並設定具有 Azure App Service 和 Azure App Service 計劃的發佈設定檔,以便承載應用程式。 接著,您會建立 Azure SQL Server 和 Azure SQL 資料庫來包含應用程式數據,並設定資料庫內容以連接應用程式與資料庫。

  1. 在 Visual Studio 方案總管中,以滑鼠右鍵按兩下 DotNetAppSqlDb 專案,然後選取 [ 發佈]。

    顯示 [從方案總管發佈] 的螢幕擷取畫面。

  2. 在 [ 發佈] 畫面上,選取 [Azure ] 作為您的目標,然後選取 [ 下一步]。

  3. 在下一個畫面上,確定已選取 [Azure App Service][Windows] ,然後選取 [ 下一步]。

登入並新增 Azure App Service

  1. 在下一個 [ 發佈 ] 畫面上,登入您的Microsoft帳戶和您想要使用的訂用帳戶。

  2. App Service 旁,選取 [新建]。

    顯示在 [發佈] 窗格中選取 [建立新的] 以建立 App Service 的螢幕擷取畫面。

設定 Azure App Service

  1. [App Service (Windows)] 畫面上,設定 App Service 名稱資源群組主控方案

    顯示建立 App Service 方案的螢幕快照。

  2. [名稱] 底下,您可以保留產生的 Web 應用程式名稱,或將它變更為具有字元 a-z0-9-的另一個名稱。 Web 應用程式名稱在所有 Azure 應用程式中都必須是唯一的。

  3. [資源群組] 旁,選取 [ 新增],並將資源組名命名 為 myResourceGroup

    資源群組是一個邏輯容器,可在其中部署與管理 Azure 資源 (例如 Web 應用程式、資料庫和儲存體帳戶)。 例如,您可以選擇在稍候透過一個簡單的步驟刪除整個資源群組。

  4. 選取 [主控方案]旁的 [新增]

    App Service 方案會指定用來裝載應用程式的 Web 伺服器陣列位置、大小和功能。 在裝載多個應用程式時,您可以將 Web 應用程式設定為共用單一 App Service 方案來節省開支。

    App Service 方案可定義:

    • 區域 (例如︰北歐、美國東部或東南亞)
    • 執行個體大小 (小型、中型或大型)
    • 級別計數 (1 到 20 個執行個體)
    • SKU (免費、共用、基本、標準或進階)
  5. 完成 [ 主控方案] 畫面,然後選取 [ 確定]。

    設定 建議的值 取得詳細資訊
    App Service 方案 myAppServicePlan App Service 方案
    位置 美國東部 Azure 區域
    大小 免費 定價層

    顯示建立主機代管方案的螢幕快照。

  6. [App Service (Windows)] 畫面上,選取 [ 建立],然後等候 Azure 資源建立。

  7. [ 發佈] 畫面會顯示您設定的資源。 選取 [完成],然後選取 [關閉]

    顯示您所建立資源的螢幕快照。

建立伺服器和資料庫

您必須先有 邏輯 SQL 伺服器,才能建立資料庫。 邏輯 SQL 伺服器是邏輯建構,包含一組當作群組管理的資料庫。

  1. DotNetAppSqlDb 應用程式的 [發佈] 畫面上,於 [服務相依性] 區段中,選取 SQL Server Database 旁的省略號 ...,然後選取 [連線]。

    附註

    請務必從 [發佈] 標籤設定 SQL 資料庫,而不是 [已連線的服務] 標籤。

    顯示設定 SQL Database 相依性之螢幕快照。

  2. 在 [ 連線至相依性] 畫面上,選取 [Azure SQL Database ],然後選取 [ 下一步]。

  3. 在 [ 設定 Azure SQL Database] 畫面上,選取 [ 新建]。

  4. [Azure SQL Database] 畫面的 [ 資料庫伺服器] 旁,選取 [ 新增]。

  5. 將伺服器名稱變更為所需值。 伺服器名稱在 Azure SQL 中的所有伺服器上都必須是唯一的。

  6. 請選擇 [確定]

    顯示建立伺服器的螢幕快照。

  7. [Azure SQL Database] 畫面上,保留預設產生的 資料庫名稱。 選取 [建立],並等候系統建立資料庫資源。

    顯示設定資料庫的螢幕快照。

  8. 建立資料庫資源時,請選取 [ 下一步]。

  9. 在 [ 連線到 Azure SQL Database] 畫面上,選取 [ 完成]。

    螢幕截圖,其中包含關於配置管理識別以使連線正常運行的訊息。

    附註

    如果您改為看到 本機使用者秘密檔案 ,請確定您已使用 [發佈 ] 頁面,而非 [ 已連線的服務 ] 頁面來設定 SQL Database。

您的 Azure SQL Database 連線現在已設定為使用 Azure 服務的受控識別,這是將應用程式連線到未使用秘密或密碼的 Azure 資源的安全方法。 您現在必須在與此受控識別對應的 SQL 用戶上設定適當的許可權,連線才能運作。

設定受控身分識別

當 Azure SQL Database 建立精靈使用受控識別和 Entra ID 預設驗證設定 Azure SQL Server 時,它會將您的 Entra ID 帳戶新增為 Azure SQL 系統管理員。如果您已登入 Visual Studio 中的相同帳戶,您可以使用相同的連接字串連線到 Visual Studio 和 Azure 中的資料庫。

  1. 從 [工具] 功能表中,選取 [NuGet 套件管理員]> [套件管理員主控台]

  2. 套件管理員主控台中,安裝下列套件:

    Install-Package Microsoft.Data.SqlClient
    Install-Package Microsoft.EntityFramework.SqlServer
    
  3. 在 PowerShell 命令行中,執行下列命令以登入 SQL Database,將 <server-name> 替換為您的伺服器名稱,並將 <entra-id-user> 替換為您在 Visual Studio 中用來設定資料庫的 Microsoft Entra 使用者名稱。 該 Entra 用戶預設具有資料庫伺服器的系統管理員存取權。

    sqlcmd -S <servername>.database.windows.net -d DotNetAppSqlDb_db -U <entra-id-user> -G -l 30
    

    請遵循提示登入。

  4. 在 SQL 提示字元中,執行下列命令來授與應用程式所需的最低許可權,並將 <app-name> 取代為您的應用程式名稱。

    CREATE USER [<app-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<app-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<app-name>];
    ALTER ROLE db_ddladmin ADD MEMBER [<app-name>];
    GO
    

更新資料庫內容

應用程式會使用資料庫內容來與 模型/MyDatabaseContext.cs 檔案中參考的資料庫連線。 在本節中,您將更新代碼以參考 Entity Framework 6 的 SQL Server 提供者,這依賴於現代的 Microsoft.Data.SqlClient ADO.NET 提供者。

Entity Framework 6 提供者會取代內建的 System.Data.SqlClient SQL Server 提供者,並支援 Microsoft Entra ID 的驗證方法。 如需詳細資訊,請參閱 Microsoft.EntityFramework.SqlServer}

[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))] 在本機運作時,使用 Microsoft.Data.SqlClient 作為資料庫內容,但因為在 Azure App Service 中,提供者已被硬式編碼為 System.Data.SqlClient,您需要擴充 MicrosoftSqlDbConfiguration,將所有對 System.Data.SqlClient 的參考重新導向至 Microsoft.Data.SqlClient

  1. web.config中,移除 entityFramework/providers/provider 區段和行: <provider invariantName="System.Data.SqlClient" .../>

  2. Models/MyDatabaseContext.cs中,新增下列類別:

        public class AppServiceConfiguration : MicrosoftSqlDbConfiguration
        {
            public AppServiceConfiguration()
            {
                SetProviderFactory("System.Data.SqlClient", Microsoft.Data.SqlClient.SqlClientFactory.Instance);
                SetProviderServices("System.Data.SqlClient", MicrosoftSqlProviderServices.Instance);
                SetExecutionStrategy("System.Data.SqlClient", () => new MicrosoftSqlAzureExecutionStrategy());
            }
        }
    
  3. 將下列屬性新增至 MyDatabaseContext 類別宣告:

    [DbConfigurationType(typeof(AppServiceConfiguration))]
    

部署 ASP.NET 應用程式

  1. 在 [ 發佈] 索引標籤頂端,選取 [ 發佈]。 您的 ASP.NET 應用程式會部署至 Azure,而您的預設瀏覽器會啟動至已部署應用程式的 URL。

  2. 若要測試應用程式,請新增一些 to-do 項目。

    顯示 Azure App Service 中已發佈 ASP.NET 應用程式的螢幕快照。

恭喜! 您的資料導向 ASP.NET 應用程式正在 Azure App Service 中執行。

使用 SQL Server 物件總管

您可以使用 Visual Studio SQL Server 物件總 管,輕鬆地探索和管理 Azure SQL 資料庫。 在 SQL Server 物件總管中,您可以執行最常見的資料庫作業,例如執行查詢或建立數據表、檢視和預存程式。

允許來自您電腦的用戶端連接

根據預設,Azure 伺服器只允許從 Azure 服務連線到其資料庫,例如您的 Azure 應用程式。 新資料庫已將防火牆開啟,允許存取您所建立的 Azure App Service 應用程式。

若要從本機計算機存取資料庫,例如從 Visual Studio,Azure 伺服器必須開啟防火牆,以允許存取電腦的公用 IP 位址。

如果系統提示您新增本機用戶端的存取權,請務必選取 [ 允許計算機的公用IP位址] 選項。 此選項會建立防火牆規則,以允許本機計算機的公用IP位址。 對話框已填入您電腦的目前IP位址。

如果您沒有收到新增本機計算機的存取權的提示,您可以在 Azure 入口網站中移至 Azure SQL 資料庫,然後選取頂端功能表欄上的 [ 設定伺服器防火牆 ]。 在 [防火牆規則] 底下的 [網络] 頁面上,選取 [新增用戶端 IPv4 位址] 選項。

附註

若您的網際網路服務提供者變更公用 IP 位址,則須重新設定防火牆,才能再次存取 Azure 資料庫。

在本機連線到 Azure SQL 資料庫

  1. 從 [檢視] 功能表選取 [SQL Server 物件總管]

  2. [SQL Server 物件總管 ] 視窗頂端,選取要 新增 SQL Server 的圖示。

  3. Connect 畫面上,您的連線會出現在 Azure 標籤底下。 完成 伺服器名稱使用者名稱密碼資料庫名稱的信息,然後選取 [ 連線]。

    顯示從 Visual Studio 設定資料庫連線的螢幕快照。

  4. Visual Studio 完成 SQL Database 實例的連線之後,您的資料庫會出現在 SQL Server 物件總管中。 請展開 <[您的連線名稱]>>[資料庫]><[您的資料庫名稱]>> 以查看資料。

  5. 展開 [數據表],以滑鼠右鍵按兩下 ToDoes 數據表,然後選取 [ 檢視數據 ] 以與資料庫數據互動。

    顯示探索 SQL Database 物件的螢幕快照。

使用 Code First 移轉更新應用程式

您可以在 Visual Studio 中使用熟悉的工具,在 Azure 中更新資料庫和應用程式。 在此步驟中,您會使用 Entity Framework 中的 Code First 移轉來變更資料庫架構,並將變更發佈至 Azure。

如需有關使用 Entity Framework Code First 移轉的詳細資訊,請參閱使用 MVC 5 開始使用 Entity Framework 6 Code First

更新資料模型

在程式碼編輯器中開啟 Models\Todo.cs。 將下列屬性加入至 ToDo 類別:

public bool Done { get; set; }

在本機執行 Code First 移轉

執行數個命令以進行本機資料庫的更新。

  1. 從 [工具] 功能表中,選取 [NuGet 套件管理員]> [套件管理員主控台]

  2. 在 [套件管理員主控台] 視窗中,啟用 Code First 移轉:

    Enable-Migrations
    
  3. 新增移轉:

    Add-Migration AddProperty
    
  4. 更新本機資料庫:

    Update-Database
    
  5. Ctrl+F5 以執行應用程式。 測試 [編輯]、 [詳細數據] 和 [ 建立新 連結]。

如果應用程式載入時沒有錯誤,Code First Migrations 就會成功。 不過,您的頁面仍然看起來一樣,因為您的應用程式邏輯尚未使用這個新屬性。

使用新屬性

在您的程式代碼中進行一些變更,以查看 Done 作用中的屬性。 在本教學課程中,您只需變更 IndexCreate 檢視來使用新的屬性。

  1. 開啟 Controllers\TodosController.cs,然後在 Create() 第 52 行的 方法中,將 新增 Done 至 屬性中的 Bind 屬性清單。 您的 Create() 方法簽章看起來應該像下列程式代碼:

    public ActionResult Create([Bind(Include = "Description,CreatedDate,Done")] Todo todo)
    
  2. 開啟 Views\Todos\Create.cshtml,在 Razor 程式碼中,注意使用 <div class="form-group">model.Description元素和使用 <div class="form-group">model.CreatedDate元素。

    在這兩個元素之後,新增一個使用 <div class="form-group">model.Done 元素。

    <div class="form-group">
        @Html.LabelFor(model => model.Done, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            <div class="checkbox">
                @Html.EditorFor(model => model.Done)
                @Html.ValidationMessageFor(model => model.Done, "", new { @class = "text-danger" })
            </div>
        </div>
    </div>
    
  3. 開啟 Views\Todos\Index.cshtml,並在空 <th></th> 元素正上方新增下列 Razor 程式代碼:

    <th>
        @Html.DisplayNameFor(model => model.Done)
    </th>
    
  4. <td> 包含 Html.ActionLink() 協助程式方法的 元素上方,使用下列Razor程式代碼新增另一個 <td> 元素:

    <td>
        @Html.DisplayFor(modelItem => item.Done)
    </td>
    
  5. 儲存所有檔案,然後按 Ctrl+F5 以執行應用程式。

  6. 在應用程式中,新增 to-do 項目,然後選取 [完成]。 此項目應會在您的首頁上隨即顯示為已完成的項目。 [ 編輯 ] 檢視不會顯示 [ 完成] 字段,因為您沒有變更 [編輯 ] 檢視。

啟用 Azure 中的 Code First 移轉

現在您的程式代碼變更可運作,包括資料庫移轉,您可以將它發佈至 Azure 應用程式,並使用 Code First 移轉來更新您的 Azure SQL 資料庫。

  1. 在 Visual Studio [方案總管] 中,以滑鼠右鍵按鍵按下您的項目,然後選取 [ 發佈]。

  2. 選取 [更多動作>編輯 ] 以開啟發佈設定。

    顯示開啟發佈設定的螢幕快照。

  3. [MyDatabaseContext ] 下拉式清單中,選取 Azure SQL 資料庫的資料庫連線。

  4. 選取 [執行程序代碼第一次移轉] [在應用程式啟動時執行],然後選取 [ 儲存]。

    在 Azure 應用程式中,顯示啟用 Code First Migrations 的螢幕擷取畫面。

發佈您的變更

現在,您已在 Azure 應用程式中啟用 Code First 移轉,請發佈您的程式碼變更。

  1. 請在 [發佈] 頁面上選取 [發佈]

  2. 在已發佈的 Web 應用程式中,請嘗試再次新增更多 to-do 項目,然後選取 [完成],而且它們應該會顯示在您的首頁上做為已完成的專案。

    仍會顯示您現有的所有待辦事項項目。 當您重新發佈 ASP.NET 應用程式時,Azure SQL 資料庫中的現有數據不會遺失。 此外,Code First 移轉只會變更數據架構,並將您的數據保持不變。

    螢幕快照,顯示 Code First Migration 之後的 Azure 應用程式。

資料流應用程式記錄

您可以將追蹤訊息從 Azure 應用程式直接串流處理到 Visual Studio。

開啟 Controllers\TodosController.cs,並注意每個動作都是以 Trace.WriteLine() 方法開頭。 此程式代碼會示範如何將追蹤訊息新增至 Azure 應用程式。

啟用記錄資料流

  1. 在 [Visual Studio 發佈] 頁面上,向下捲動至 [ 裝載 ] 區段。

  2. 選取右上方的省略號 ... ,然後選取 [檢視串流記錄]。

    顯示 [啟用記錄串流] 的螢幕快照。

    現在已將記錄資料流處理至 [輸出] 視窗。

    顯示 [輸出] 視窗中日誌串流的螢幕擷取畫面。

    您尚未看到任何追蹤訊息,因為當您第一次選取 [ 檢視串流記錄] 時,您的 Azure 應用程式會將追蹤層級設定為 Error,這隻會使用 Trace.TraceError() 方法記錄錯誤事件。

變更追蹤層級

  1. 若要變更追蹤層級以輸出其他追蹤訊息,請在 [發佈] 頁面的 [裝載] 區段中,選取右上角的 ... ,然後選取 [在 Azure 入口網站中開啟]。

  2. 在應用程式的 Azure 入口網站頁面中,於左側功能表的 [監視] 底下選取 [App Service 記錄]

  3. 在 [應用程式記錄 (Filesystem)] 底下的 [層級] 之下選取 [詳細資訊],然後選取 [儲存]

    秘訣

    您可以試驗不同的追蹤層級,以查看針對每個層級顯示的訊息類型。 例如,[資訊] 層級包含 Trace.TraceInformation()Trace.TraceWarning()Trace.TraceError() 所建立的所有記錄,但不包含 Trace.WriteLine() 所建立的記錄。

  4. 在瀏覽器中,再次移至您的 Azure to-do 列表應用程式,並巡覽應用程式。 追蹤類似下列範例的訊息現在會串流至 Visual Studio 中的 [輸出 ] 視窗。

    Application:2025-05-12T23:41:11  PID[17108] Verbose     GET /Todos/Index
    Application:2025-05-12T23:42:04  PID[17108] Verbose     GET /Todos/Index
    Application:2025-05-12T23:42:06  PID[17108] Verbose     POST /Todos/Create
    Application:2025-05-12T23:42:07  PID[17108] Verbose     GET /Todos/Index
    

停止記錄資料流

若要停止記錄串流服務,請選取 [輸出] 視窗中的 [停止監視] 圖示。

顯示停止記錄串流的螢幕快照。

清除資源

在前述步驟中,您在資源群組中建立了 Azure 資源。 如果您認為未來不需要這些資源,可以用刪除資源群組的方式將它們刪除。

  1. 從 Azure 入口網站中的 Web 應用程式概觀頁面,選取資源群組底下的 myResourceGroup 連結。
  2. 在 [資源群組] 頁面上,確定所列出的資源是您想要刪除的項目。
  3. 選取 [刪除資源群組],在文字方塊中輸入 myResourceGroup,然後選取 [刪除]
  4. 請選取 [刪除] 以再次確認。

請移至下一個教學課程,瞭解如何使用受控識別來改善 Azure SQL Database 連線安全性。