将连接添加到 Azure SQL 数据库
使用 Visual Studio 连接服务,可以连接到 Azure SQL 数据库、本地 Emulator(例如在开发过程中)或本地 SQL Server 数据库。 对于本地 SQL Server,请参阅连接到数据库。
在 Visual Studio 中,通过使用“连接服务”功能可从以下任何项目类型进行连接:
- ASP.NET Core
- .NET Core(包括控制台应用、WPF、Windows 窗体、类库)
- .NET Core 辅助角色
- Azure Functions
- .NET Framework 控制台应用
- ASP.NET 模型-视图-控制器 (MVC) (.NET Framework)
- 通用 Windows 平台应用
连接服务功能可将所有需要的引用和连接代码添加到项目,并相应地修改配置文件。
先决条件
- 安装有 Azure 工作负荷的 Visual Studio。
- 一个受支持类型的项目
- 一个 Azure 帐户。 如果没有 Azure 帐户,请激活你的 Visual Studio 订阅者 Azure 权益或注册免费试用版。
使用连接的服务连接到 Azure SQL 数据库
在 Visual Studio 中打开项目。
在“解决方案资源管理器”中,右键单击“连接的服务”节点,并在上下文菜单中选择“添加”,打开可用服务的菜单。
如果未看到“连接的服务”节点,请选择项目>连接的服务>添加。
选择 SQL Server 数据库。 随即显示连接到依赖项页。 应会看到多个选项:
- SQL Server Express LocalDB,随 Visual Studio 一起安装的内置 SQL 数据库产品/服务
- 计算机上的本地容器中的 SQL Server 数据库
- SQL Server 数据库,本地网络上的本地 SQL Server
- Azure SQL 数据库,用于作为 Azure 服务来运行的 SQL 数据库
可以从本地数据库开始降低成本并简化早期开发。 稍后可以通过重复执行这些步骤并选择另一个选项,迁移到 Azure 中的实时服务。 如果在本地创建要在 Azure 中重新创建的数据库,则可在此时将数据库迁移到 Azure。
如果要连接到 Azure 服务,请继续执行下一步;如果尚未登录,请先登录到 Azure 帐户,然后再继续。 如果没有 Azure 帐户,可以注册免费试用版。
在配置 Azure SQL 数据库屏幕中,选择现有 Azure SQL 数据库,然后选择下一步。
如果需要创建新组件,请转到下一步。 否则,请跳到步骤 7。
若要创建 Azure SQL 数据库,请执行以下操作:
选择绿色加号旁边的新建。
填写“Azure SQL 数据库: 新建”屏幕,然后选择“创建”。
当显示“配置 Azure SQL 数据库”屏幕时,新数据库将出现在列表中。 在列表中选择新数据库,并选择下一步。
输入连接字符串名称,或选择默认值,然后选择“其他设置”。
注意
使用 Visual Studio 2022 版本 17.12 及更高版本,此过程使用 Microsoft Entra 托管标识(无密码身份验证方法)连接到数据库。 此屏幕上的警告意味着在 Visual Studio 中完成此过程后,需要在 Azure 门户中执行手动步骤。 请参阅 Microsoft Entra 身份验证。
选择是要将连接字符串存储在本地机密文件中,还是存储在 Azure 密钥库中,然后选择“下一步”。
更改摘要屏幕显示了在完成该过程后将对项目进行的所有修改。 如果更改看起来正常,请选择“完成”。
如果系统提示设置防火墙规则,请选择“是”。
在“解决方案资源管理器”中,双击“连接的服务”节点以打开“连接的服务”选项卡。连接显示在“服务依赖项”部分下:
如果单击添加的依赖项旁边的三个点,可以看到各种选项(例如“连接”)以重新打开向导并更改连接。 还可以单击窗口右上角的三个点,查看用于启动本地依赖项、更改设置等的选项。
如果使用托管标识(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
请参阅 Azure SQL Microsoft Entra 中的托管标识类型和托管标识。 添加的角色取决于用例。 请参阅 ALTER ROLE。
如果代码引用 System.Data.SqlClient
,则需要升级到 Microsoft.Data.SqlClient
,因为 System.Data.SqlClient
不支持Microsoft Entra 身份验证。 若要升级,请添加引用 Microsoft.Data.SqlClient NuGet 包,并更新引用System.Data.SqlClient
Microsoft.Data.SqlClient
命名空间的任何 using 指令。 存在一些行为更改;请参阅 移植备忘单。
在 Visual Studio 中打开项目。
在“解决方案资源管理器”中,右键单击“连接的服务”节点,并在上下文菜单中选择“添加”,打开可用服务的菜单。
如果未看到“连接的服务”节点,请选择项目>连接的服务>添加。
选择 SQL Server 数据库。 随即显示连接到依赖项页。 应会看到多个选项:
- SQL Server Express LocalDB,随 Visual Studio 一起安装的内置 SQL 数据库产品/服务
- 计算机上的本地容器中的 SQL Server 数据库
- SQL Server 数据库,本地网络上的本地 SQL Server
- Azure SQL 数据库,用于作为 Azure 服务来运行的 SQL 数据库
可以从本地数据库开始降低成本并简化早期开发。 稍后可以通过重复执行这些步骤并选择另一个选项,迁移到 Azure 中的实时服务。 如果在本地创建要在 Azure 中重新创建的数据库,则可在此时将数据库迁移到 Azure。
如果要连接到 Azure 服务,请继续执行下一步;如果尚未登录,请先登录到 Azure 帐户,然后再继续。 如果没有 Azure 帐户,可以注册免费试用版。
在配置 Azure SQL 数据库屏幕中,选择现有 Azure SQL 数据库,然后选择下一步。
如果需要创建新组件,请转到下一步。 否则,请跳到步骤 7。
若要创建 Azure SQL 数据库,请执行以下操作:
选择绿色加号旁边的新建。
填写“Azure SQL 数据库: 新建”屏幕,然后选择“创建”。
当显示“配置 Azure SQL 数据库”屏幕时,新数据库将出现在列表中。 在列表中选择新数据库,并选择下一步。
输入连接字符串名称或选择默认值,然后选择是希望连接字符串存储在本地机密文件中,还是存储在 Azure Key Vault 中。
“更改摘要”屏幕显示了在完成该过程后将对项目进行的所有修改。 如果更改看起来正常,请选择“完成”。
如果系统提示设置防火墙规则,请选择“是”。
在“解决方案资源管理器”中,双击“连接的服务”节点以打开“连接的服务”选项卡。连接显示在“服务依赖项”部分下:
如果单击添加的依赖项旁边的三个点,可以看到各种选项(例如“连接”)以重新打开向导并更改连接。 还可以单击窗口右上角的三个点,查看用于启动本地依赖项、更改设置等的选项。
访问连接字符串
了解如何按照在 ASP.NET Core 开发环境中安全存储应用机密安全存储机密。 具体而言,若要从机密存储中读取连接字符串,可以添加代码,如通过配置 API 读取机密中所示。 另请参阅 ASP.NET Core 中的依赖关系注入。
实体框架迁移
在早期开发期间,使用本地数据存储可能很方便,但借助 Entity Framework Core,当你准备好迁移到云时,可以使用 Visual Studio 对实体框架迁移的支持来移动数据库,或者将更改与远程数据存储进行合并。 请参阅迁移概述。
在“连接的服务”选项卡上,可单击三个点来查找迁移命令,如以下屏幕截图所示:
这里提供了命令用于创建新迁移、直接应用迁移或生成应用迁移的 SQL 脚本。
添加迁移
当引入数据模型更改时,你可以使用 Entity Framework Core 工具添加相应的迁移,该迁移在代码中描述使数据库架构保持同步所需的更新。Entity Framework Core 会将当前模型与旧模型的快照进行比较来确定差异,并生成迁移源文件。 这些文件会添加到项目中(通常在名为 Migrations 的文件夹中),并且可以像跟踪任何其他源文件一样,在项目的源代码管理中跟踪这些文件。
选择此选项时,系统会要求你提供表示要迁移的数据库架构的上下文类名称。
更新数据库
创建迁移后,可将其应用于数据库。 实体框架会使用迁移代码中指定的更改更新数据库和架构。 选择此选项时,系统会要求你提供表示要迁移的数据库架构的上下文类名称。
生成 SQL 脚本
建议通过生成 SQL 脚本,将迁移部署到生产数据库。 此策略的优点包括:
- 可以检查 SQL 脚本的准确性;这一点很重要,因为将架构更改应用于生产数据库是一项可能导致数据丢失的潜在危险操作。
- 在某些情况下,可以根据生产数据库的特定需求调整这些脚本。
- SQL 脚本可以与部署技术结合使用,甚至可以在 CI 过程中生成。
- SQL 脚本可以提供给 DBA,并且可以单独管理和存档。
使用此选项时,系统会询问数据库上下文类和脚本文件的位置。
在 SQL Server 对象资源管理器中打开
为了方便起见,此命令允许跳转到 SQL Server 对象资源管理器,让你能够查看表和其他数据库实体,并直接处理数据。 请参阅对象资源管理器。
后续步骤
你可以继续学习 Azure SQL 数据库的快速入门,但无需从头开始,而是可以在设置初始连接后开始。 如果使用实体框架,可以从添加代码以连接到 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 密钥库 中的密钥匹配。 例如,使用 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"];