将连接添加到 Azure SQL 数据库

使用 Visual Studio 连接服务,可以连接到 Azure SQL 数据库、本地模拟器(例如,在开发期间),或本地 SQL Server 数据库。 有关本地 SQL Server,请参阅连接到数据库

使用 Visual Studio,可以使用 Connected Services 功能从以下任何项目类型进行连接:

  • ASP.NET Core
  • .NET Core(包括控制台应用、WPF、Windows 窗体、类库)
  • .NET Core 辅助角色
  • Azure Functions
  • .NET Framework 控制台应用
  • ASP.NET 模型View-Controller (MVC) (.NET Framework)
  • 通用 Windows 平台应用

连接的服务功能将所需的所有引用和连接代码添加到项目,并相应地修改配置文件。

先决条件

使用连接服务连接到 Azure SQL 数据库

  1. 在 Visual Studio 中打开项目。

  2. 解决方案资源管理器中,右键单击 连接服务 节点,并从上下文菜单中选择 “添加”以打开可用服务的菜单。

    显示“连接服务”上下文菜单选项的屏幕截图。

    如果您看不到 连接服务 节点,请选择 Project>Connected Services>并添加

  3. 选择“SQL Server 数据库”。 随即显示“连接到依赖项”页。 应会看到多个选项:

    • SQL Server Express LocalDB(随 Visual Studio 一起安装的内置 SQL 数据库产品/服务)
    • 计算机上的本地容器中的 SQL Server 数据库
    • SQL Server 数据库,本地网络上的本地 SQL Server
    • Azure SQL 数据库,用于作为 Azure 服务运行的 SQL 数据库

    从本地数据库开始,可以降低成本并简化早期开发。 稍后可以通过重复这些步骤并选择另一个选项,迁移到 Azure 中的实时服务。 如果在本地创建想要在 Azure 中重新创建的数据库,则可以在该时间将数据库迁移到 Azure。

    显示 SQL 数据库选项的 屏幕截图。

    如果要连接到 Azure 服务,请继续执行下一步,或者尚未登录,请在继续之前登录到 Azure 帐户。 如果没有 Azure 帐户,可以注册 免费试用版

  4. 配置 Azure SQL 数据库 界面上,选择现有 Azure SQL 数据库,然后选择 下一步

    如果需要创建新组件,请转到下一步。 否则,请跳到步骤 7。

    显示“连接到现有 Azure SQL 数据库组件”屏幕的屏幕截图。

  5. 创建 Azure SQL 数据库:

    1. 选择绿色加号旁边的“新建”。

    2. 填写“Azure SQL 数据库: 新建”屏幕,然后选择“创建”。

      显示“新建 Azure SQL 数据库”屏幕的屏幕截图。

    3. 显示 配置 Azure SQL 数据库 屏幕时,新数据库将显示在列表中。 在列表中选择新数据库,然后选择“下一步”

  6. 输入连接字符串名称或选择默认值,然后选择 其他设置

    显示“指定连接字符串”屏幕的屏幕截图。

    说明

    使用 Visual Studio 2022 版本 17.12 及更高版本,此过程使用 Microsoft Entra 托管标识(无密码身份验证方法)连接到数据库。 此屏幕上的警告意味着在 Visual Studio 中完成此过程后,需要在 Azure 门户中执行手动步骤。 请参阅 Microsoft Entra 身份验证

  7. 选择是要将连接字符串存储在本地机密文件中,还是 Azure Key Vault中存储,然后选择“下一步”

    屏幕截图,其中显示了用于存储 Azure SQL 数据库连接字符串的选项。

  8. “更改摘要”屏幕显示了在完成该过程后将对项目进行的所有修改。 如果更改看起来正常,请选择“完成”。

    显示“更改摘要”部分的屏幕截图。

    如果系统提示设置防火墙规则,请选择“是”。

    显示防火墙规则的 屏幕截图。

  9. 在解决方案资源管理器中,双击 连接服务 节点,打开 连接服务 选项卡。连接显示在 服务依赖项 部分下:

    显示“服务依赖项”部分的屏幕截图。

    如果单击添加的依赖项旁边的三个点,可以看到各种选项,例如 连接 重新打开向导并更改连接。 还可以单击窗口右上角的三个点,查看用于启动本地依赖项、更改设置等的选项。

  10. 如果使用托管标识(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 管理员用户

完成 Connected Services 过程后,需要创建一个与托管标识对应的 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

<identity-name> 是Microsoft Entra ID 中托管标识的名称。 如果标识是系统分配的,则名称始终与应用服务应用的名称相同。 对于部署槽位,其系统分配的标识名称为 <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 命名空间。 存在一些行为更改,请参阅移植速查表

  1. 在 Visual Studio 中打开项目。

  2. 解决方案资源管理器中,右键单击 连接服务 节点,并从上下文菜单中选择 “添加”以打开可用服务的菜单。

    显示“连接服务”上下文菜单选项的屏幕截图。

    如果未看到 连接服务 节点,请选择 项目>连接服务>添加

  3. 选择“SQL Server 数据库”。 随即显示“连接到依赖项”页。 应会看到多个选项:

    • SQL Server Express LocalDB(随 Visual Studio 一起安装的内置 SQL 数据库产品/服务)
    • 你计算机上的本地容器内的 SQL Server 数据库
    • SQL Server 数据库,本地网络上的本地 SQL Server
    • Azure SQL 数据库,用于作为 Azure 服务运行的 SQL 数据库

    从本地数据库开始,可以降低成本并简化早期开发。 稍后可以通过重复这些步骤并选择另一个选项,迁移到 Azure 中的实时服务。 如果在本地创建想要在 Azure 中重新创建的数据库,则可以在该时间将数据库迁移到 Azure。

    显示 SQL 数据库选项的 屏幕截图。

    如果要连接到 Azure 服务,请继续执行下一步,或者尚未登录,请在继续之前登录到 Azure 帐户。 如果没有 Azure 帐户,可以注册 免费试用版

  4. 配置 Azure SQL 数据库 界面中,选择现有的 Azure SQL 数据库,然后选择 下一步

    如果需要创建新组件,请转到下一步。 否则,请跳到步骤 7。

    显示“连接到现有 Azure SQL 数据库组件”屏幕的屏幕截图。

  5. 创建 Azure SQL 数据库:

    1. 选择绿色加号旁边的“新建”。

    2. 填写“Azure SQL 数据库: 新建”屏幕,然后选择“创建”。

      显示“新建 Azure SQL 数据库”屏幕的屏幕截图。

    3. 显示 配置 Azure SQL 数据库 屏幕时,新数据库将显示在列表中。 在列表中选择新数据库,然后选择“下一步”

  6. 输入连接字符串名称,或选择默认值,并选择是要将连接字符串存储在本地机密文件中,还是 Azure Key Vault中。

    显示“指定连接字符串”屏幕的屏幕截图。

  7. “更改摘要”屏幕显示了在完成该过程后将对项目进行的所有修改。 如果更改看起来正常,请选择“完成”。

    显示“更改摘要”部分的屏幕截图。

    如果系统提示设置防火墙规则,请选择“是”。

    显示防火墙规则的 屏幕截图。

  8. 在解决方案资源管理器中,双击 连接服务 节点,打开 连接服务 选项卡。连接显示在 服务依赖项 部分下:

    显示“服务依赖项”部分的屏幕截图。

    如果单击添加的依赖项旁边的三个点,可以看到各种选项,例如 连接 重新打开向导并更改连接。 还可以单击窗口右上角的三个点,查看用于启动本地依赖项、更改设置等的选项。

访问连接字符串

了解如何在 ASP.NET Core 开发中按照 安全存储应用机密的方法安全地存储机密。 具体而言,若要从机密存储中读取连接字符串,可以添加代码,如通过配置 API 读取机密中所示。 另请参阅 ASP.NET Core 中的依赖项注入。

实体框架迁移

在早期开发期间使用本地数据存储可能很方便,但使用 Entity Framework Core,当你准备好迁移到云时,可以使用 Visual Studio 对 Entity Framework 迁移的支持来移动数据库,或者将更改与远程数据存储合并。 请参阅 迁移概述

在“连接服务 选项卡上,单击三个点即可找到迁移命令,如屏幕截图中所示:

显示迁移命令的 屏幕截图。

命令可用于创建新迁移、直接应用这些迁移或生成应用迁移的 SQL 脚本。

添加迁移

引入数据模型更改后,可以使用 Entity Framework Core 工具添加相应的迁移,该迁移在代码中描述了保持数据库架构同步所需的更新。Entity Framework Core 将当前模型与旧模型的快照进行比较,以确定差异并生成迁移源文件。 这些文件将添加到项目中,通常位于名为 迁移 的文件夹中,并且可以像任何其他源文件一样在项目的源代码管理中跟踪这些文件。

选择此选项时,系统会要求你提供表示要迁移的数据库架构的上下文类名称。

显示添加实体框架迁移的屏幕截图。

更新数据库

创建迁移后,可以将其应用于数据库。 Entity Framework 使用迁移代码中指定的更改更新数据库和架构。 选择此选项时,系统会要求你提供表示要迁移的数据库架构的上下文类名称。

生成 SQL 脚本

将迁移部署到生产数据库的建议方法是生成 SQL 脚本。 此策略的优点包括:

  • 可以查看 SQL 脚本的准确性;这一点很重要,因为将架构更改应用于生产数据库是一个可能涉及数据丢失的潜在危险操作。
  • 在某些情况下,可以调整脚本以满足生产数据库的特定需求。
  • SQL 脚本可与部署技术结合使用,甚至可以作为 CI 过程的一部分生成。
  • SQL 脚本可以提供给 DBA,并且可以单独管理和存档。

使用此选项时,系统会询问数据库上下文类以及脚本文件的位置。

显示“生成 SQL 脚本”选项的屏幕截图。

在 SQL Server 对象资源管理器中打开

为方便起见,此命令可跳转到 SQL Server 对象资源管理器,以便查看表和其他数据库实体,并直接处理数据。 请参阅对象资源管理器

显示 SQL Server 对象资源管理器的 屏幕截图。

后续步骤

可以继续学习 Azure SQL 数据库的快速入门,但在设置初始连接后可以开始,而不是从头开始。 如果您正在使用 Entity Framework,您可以从 开始添加代码以连接到 Azure SQL 数据库。 如果使用 SqlClient 或 ADO.NET 数据类,可以从 添加代码以连接到 Azure SQL 数据库

你的代码与快速入门中使用的代码不完全匹配,该快速入门使用另一种获取连接字符串的方式。 连接字符串是机密,它们按照 ASP.NET Core 开发中应用机密的安全存储中所述安全地进行存储。 具体而言,若要从机密存储中读取连接字符串,可以添加代码,如通过配置 API 读取机密中所示。

在 ASP.NET Core 项目中,连接服务创建的连接设置或连接字符串在配置对象中可用。 可以通过 WebApplicationBuilder 类上的属性(在许多项目模板中builder)访问它,如以下示例所示:

var connection = builder.Configuration["ConnectionStrings:DatabaseConnection"];

要提供给 Configuration 属性的字符串应与在 secrets.json 或 Azure Key Vault 中提供的密钥匹配,该密钥在 Connected Services 过程中提供。 例如,使用 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"];