使用 Visual Studio 連線服務,您可以連線到 Azure SQL Database、本機模擬器(例如在開發期間),或內部部署 SQL Server 資料庫。 如需內部部署 SQL Server,請參閱 連線到資料庫。
使用 Visual Studio,您可以使用 Connected Services 功能,從下列任何專案類型進行連線:
- ASP.NET Core
- .NET Core (包括控制台應用程式、WPF、Windows Forms、類別庫)
- .NET Core 工作者角色
- Azure Functions
- .NET Framework 控制台應用程式
- ASP.NET 模型-View-Controller (MVC) (.NET Framework)
- 通用 Windows 平台應用程式
線上的服務功能會將所有必要的參考和連線程式代碼新增至專案,並適當地修改組態檔。
先決條件
- 已安裝 Azure 工作負載的 Visual Studio。
- 支援類型中的某一專案
- Azure 帳戶。 如果您沒有 Azure 帳戶,請為 Visual Studio 訂閱者啟用 Azure 權益, 或 註冊免費試用。
使用已連線的服務連線到 Azure SQL Database
在 Visual Studio 中開啟您的專案。
在 [方案總管]中,以滑鼠右鍵按兩下 [連線服務] 節點,然後從操作功能表中選取 [新增],以開啟可用服務的功能表。
如果您沒有看到 [連線服務] 節點,請選擇 [專案>連線服務]>[新增]。
選擇 SQL Server Database。 [連線到相依性] 頁面隨即出現。 您應該會看到數個選項:
- SQL Server Express LocalDB,這是隨 Visual Studio 一起安裝的內建 SQL Database 供應專案
- 計算機上本機容器上的 SQL Server 資料庫
- 本地網路上的內部部署 SQL Server 資料庫
- Azure SQL Database,適用於以 Azure 服務身分執行的 SQL Database
您可以從本機資料庫開始降低成本並簡化早期開發。 您可以稍後重複這些步驟並選擇另一個選項,以移轉至 Azure 中的即時服務。 如果您在本機建立想要在 Azure 中重新建立的資料庫,您當時可以將資料庫移轉至 Azure。
如果您想要連線到 Azure 服務,請繼續進行下一個步驟,或如果您尚未登入,請先登入您的 Azure 帳戶,再繼續進行。 如果您沒有 Azure 帳戶,您可以註冊 免費試用。
在 [設定 Azure SQL Database ] 畫面的 [] 畫面中,選取現有的 Azure SQL Database,然後選取 [下一步]。
如果您需要建立新的元件,請移至下一個步驟。 否則,請跳至步驟 7。
若要建立 Azure SQL 資料庫:
選取 [綠色加號] 建立新的。
填寫 Azure SQL Database:建立新的 畫面,然後選取 建立。
當 [設定 Azure SQL Database] 畫面顯示時,新的資料庫會出現在清單中。 選取清單中的新資料庫,然後選取 [下一步]。
輸入連接字串名稱,或選擇預設值,然後選擇 [[其他設定]。
注意
透過 Visual Studio 2022 17.12 版和更新版本,此程式會使用 Microsoft Entra 受控識別,無密碼驗證方法,以連線到資料庫。 此畫面上的警告表示您必須在 Visual Studio 中完成此程式之後,於 Azure 入口網站中執行手動步驟。 請參閱 Microsoft Entra 驗證。
選擇您要將連接字串儲存在本機秘密檔案中,還是 Azure Key Vault中,然後選擇 [下一步]。
變更摘要 畫面會顯示當您完成程序時,將會對專案進行的所有修改。 如果變更看起來正常,請選擇 完成。
如果系統提示您設定防火牆規則,請選擇 [是] 。
在 [方案總管] 中,按兩下 [已連線的服務] 節點,以開啟 [已連線的服務] 索引標籤。聯機會出現在 [服務相依性] 區段底下:
如果您按下所新增相依性旁的三個點,您可以看到各種選項,例如 Connect 重新開啟精靈並變更連線。 您也可以點擊視窗右上角的三個點,以查看啟動本機相依服務、變更設定等其他選項。
如果您使用受控識別 (Visual Studio 17.12 和更新版本),請參閱下一節來設定 Azure SQL 資料庫中的受控識別使用者。
Microsoft Entra 驗證
透過 Visual Studio 2022 17.12 版和更新版本,聯機的服務程式會使用 Microsoft Entra 驗證,這是最安全的驗證方法。 不過,Visual Studio 不會自動為您在 Azure SQL 資料庫上建立 Microsoft Entra 系統管理員使用者。 如果沒有Microsoft Entra 系統管理員用戶,連線將無法成功驗證。
您可以使用 Azure 入口網站、PowerShell 或 Azure CLI 來建立 Microsoft Entra 系統管理員使用者。 如需每個方法的詳細指示,請參閱 設定 Microsoft Entra 系統管理員使用者。
完成連線服務程序之後,您必須建立對應至受控識別的SQL使用者,並在資料庫中執行 SQL 語句來設定許可權。 以您的 Microsoft Entra 系統管理員使用者身分登入 Azure 入口網站中 查詢編輯器,然後執行如下的語句:
CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>];
GO
在 Microsoft Entra ID 中,<identity-name> 是受控識別的名稱。 如果身分識別是系統指派的,則名稱一律與 App Service 應用程式的名稱相同。 針對部署插槽,其系統指派的身分識別名稱是 <app-name>/slots/<slot-name>。 若要授與Microsoft Entra 群組的許可權,請改用群組的顯示名稱(例如,myAzureSQLDBAccessGroup)。 請參閱 Microsoft Entra for Azure SQL 中的 受控識別類型 和受控識別類型。 您新增的角色取決於您的使用案例。 請參閱 ALTER ROLE。
如果您的程式代碼參考 System.Data.SqlClient,您必須升級至 Microsoft.Data.SqlClient,因為 System.Data.SqlClient 不支援 Microsoft Entra 驗證。 若要升級,請新增參考 Microsoft.Data.SqlClient NuGet 套件,並更新參考 System.Data.SqlClient 的任何 using 指示詞來參考 Microsoft.Data.SqlClient 命名空間。 有一些行為變更;請參閱 移植速查表。
在 Visual Studio 中開啟您的專案。
在 [方案總管]中,以滑鼠右鍵按兩下 [連線服務] 節點,然後從操作功能表中選取 [新增],以開啟可用服務的功能表。
如果您沒有看到 [連線服務] 節點,請選擇 [專案>連線服務]>[新增]。
選擇 SQL Server Database。 [連線到相依性] 頁面隨即出現。 您應該會看到數個選項:
- SQL Server Express LocalDB,這是隨 Visual Studio 一起安裝的內建 SQL Database 供應專案
- 計算機上本機容器上的 SQL Server 資料庫
- 本地網路上的內部部署 SQL Server 資料庫
- Azure SQL Database,適用於以 Azure 服務身分執行的 SQL Database
您可以從本機資料庫開始降低成本並簡化早期開發。 您可以稍後重複這些步驟並選擇另一個選項,以移轉至 Azure 中的即時服務。 如果您在本機建立想要在 Azure 中重新建立的資料庫,您當時可以將資料庫移轉至 Azure。
如果您想要連線到 Azure 服務,請繼續進行下一個步驟,或如果您尚未登入,請先登入您的 Azure 帳戶,再繼續進行。 如果您沒有 Azure 帳戶,您可以註冊 免費試用。
在 [設定 Azure SQL Database ] 畫面的 [] 畫面中,選取現有的 Azure SQL Database,然後選取 [下一步]。
如果您需要建立新的元件,請移至下一個步驟。 否則,請跳至步驟 7。
若要建立 Azure SQL 資料庫:
選取 [綠色加號] 建立新的。
填寫 Azure SQL Database:建立新的 畫面,然後選取 建立。
當 [設定 Azure SQL Database] 畫面顯示時,新的資料庫會出現在清單中。 選取清單中的新資料庫,然後選取 [下一步]。
輸入連接字串名稱,或選擇預設值,然後選擇您要將連接字串儲存在本機秘密檔案中,還是 Azure Key Vault中。
變更摘要 畫面會顯示當您完成程序時,將會對專案進行的所有修改。 如果變更看起來正常,請選擇 完成。
如果系統提示您設定防火牆規則,請選擇 [是] 。
在 [方案總管] 中,按兩下 [已連線的服務] 節點,以開啟 [已連線的服務] 索引標籤。聯機會出現在 [服務相依性] 區段底下:
如果您按下所新增相依性旁的三個點,您可以看到各種選項,例如 Connect 重新開啟精靈並變更連線。 您也可以點擊視窗右上角的三個點,以查看啟動本機相依服務、變更設定等其他選項。
存取連接字串
瞭解如何透過遵循 ASP.NET Core 中開發階段應用程式秘密的安全儲存,來安全地儲存秘密。 尤其是,若要從秘密存放區讀取連接字串,您可以如在 "透過組態 API 讀取秘密" 中新增程式碼。 另請參閱 ASP.NET Core 中的相依性插入。
Entity Framework 移轉
在早期開發階段,使用本機資料存放區可能相當便利,但當您準備遷移至雲端時,您可以利用 Visual Studio 的 Entity Framework 遷移支援來移動您的資料庫,或與遠端資料存放區合併變更。 請參閱 移轉概覽。
在 [連線服務] 索引卷標上,您可以點擊三個點來尋找移轉命令,如截圖所示。
您可以在那裡使用命令來建立新的移轉、直接套用它們,或產生套用移轉的 SQL 腳本。
新增移轉
引進數據模型變更時,您可以使用 Entity Framework Core 工具來新增對應的移轉,以在程式碼中描述讓資料庫架構保持同步所需的更新。Entity Framework Core 會比較目前的模型與舊模型的快照集,以判斷差異,併產生移轉來源檔案。 檔案會新增至您的專案,通常是在名為 Migrations 的資料夾中,而且可以像任何其他原始程式檔一樣在專案的原始檔控制中追蹤。
當您選擇此選項時,系統會要求您提供內容類別名稱,代表您要移轉的資料庫架構。
更新資料庫
创建遷移後,即可將其應用至資料庫。 Entity Framework 會使用移轉程式代碼中指定的變更來更新資料庫和架構。 當您選擇此選項時,系統會要求您提供內容類別名稱,代表您要移轉的資料庫架構。
產生 SQL 腳稿
若要將移轉部署至生產資料庫的建議方式,是產生 SQL 腳本。 此策略的優點包括:
- 您可以檢閱 SQL 腳本以取得正確性;這很重要,因為將架構變更套用至生產資料庫是可能涉及數據遺失的潛在危險作業。
- 在某些情況下,可以調整腳本以符合生產資料庫的特定需求。
- SQL 腳本可以與部署技術搭配使用,甚至可以在 CI 程式中產生。
- SQL 腳本可以提供給 DBA,而且可以分開管理和封存。
當您使用此選項時,系統會詢問資料庫內容類別和腳本檔案的位置。
在 SQL Server 物件總管中開啟
為了方便起見,此命令可讓您跳到 SQL Server 物件總管,以便檢視數據表和其他資料庫實體,並直接使用您的數據。 請參考 物件瀏覽器。
後續步驟
您可以繼續進行 Azure SQL Database 的快速入門,但不必從頭開始,您可以在初始連線設定之後啟動。 如果您使用 Entity Framework,您可以從 新增程式代碼以連線至 Azure SQL Database。 如果您使用 SqlClient 或 ADO.NET 數據類別,您可以從 新增程式代碼以連線至 Azure SQL Database。
您的程式碼將不會與快速入門使用的程式碼完全相符,因為它們使用了一種不同的方式來取得連接字串。 連接字串是秘密,而且會安全地儲存,如 ASP.NET Core中開發的應用程式秘密安全儲存中所述。 尤其是,若要從秘密存放區讀取連接字串,您可以如在 "透過組態 API 讀取秘密" 中新增程式碼。
在 ASP.NET Core 專案中,連線服務所建立的連接設定或連接字串可在組態物件中使用。 您可以透過 WebApplicationBuilder 類別上的 屬性來存取它(在許多專案範本中builder),如下列範例所示:
var connection = builder.Configuration["ConnectionStrings:DatabaseConnection"];
提供給 Configuration 屬性的字串應該符合您在連線服務程式中提供的 secrets.json 或 Azure Key Vault 中的金鑰。 例如,使用Visual Studio 2022 17.12和更新版本,連線設定會儲存在 secrets.json 中,如下所示:
{
"ConnectionStrings:DatabaseConnection": "Server=tcp:webapplication16dbserver.database.windows.net;Authentication=Active Directory Default;Database=WebApplication16_db;",
}
在 ASP.NET Core 專案中,連線服務所建立的連接設定或連接字串可在組態物件中使用。 您可以透過 WebApplicationBuilder 類別上的 屬性來存取它(在許多專案範本中builder),如下列範例所示:
var connection = builder.Configuration["ConnectionStrings:ConnectionString1"];