You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Azure SQL Database连接到.NET Web API并解决迁移报错?

问题分析与解决方法

核心问题

你混淆了数据库类型:Azure SQL Database是SQL Server兼容的数据库,并非MySQL。你当前仍在使用Entity Framework的MySQL提供程序(UseMySql)连接Azure SQL,这是导致错误的根本原因,临时错误提示是连接不匹配引发的次生问题。

解决步骤

1. 替换数据库提供程序

移除项目中MySQL相关的EF Core NuGet包(如Pomelo.EntityFrameworkCore.MySql),安装SQL Server的EF Core提供程序:

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

2. 修改DbContext配置逻辑

在Program.cs或DbContext的配置代码中,将UseMySql替换为UseSqlServer,同时启用Azure SQL推荐的临时错误重试机制:

builder.Services.AddDbContext<YourDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DbConnectionString"),
        sqlOptions => sqlOptions.EnableRetryOnFailure(
            maxRetryCount: 5,
            maxRetryDelay: TimeSpan.FromSeconds(30),
            errorNumbersToAdd: null)));

3. 修正Azure SQL连接字符串

Azure SQL的标准连接字符串不需要用单引号包裹用户名,且强制要求加密连接,正确格式如下:

DbConnectionString = "Server=tcp:server.database.windows.net,1433;Database=hms;Uid={root-user};Pwd={pw};Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"

注意点:

  • 服务器地址用逗号分隔端口(tcp:server.database.windows.net,1433)
  • 必须保留Encrypt=True(Azure SQL强制加密)
  • 移除用户名的单引号包裹

4. 重新执行迁移与数据库更新

如果之前的迁移是针对MySQL生成的,先清理旧迁移,再重新生成适配SQL Server的迁移并更新数据库:

# 清理旧迁移(可选,若旧迁移仅针对MySQL)
dotnet ef migrations remove

# 生成新的SQL Server兼容迁移
dotnet ef migrations add InitialAzureSqlSetup

# 更新Azure SQL数据库
dotnet ef database update

额外验证项

  • 确认Azure SQL服务器防火墙已添加你的本地IP(若后续部署到Azure App Service,需允许Azure服务访问)
  • 确认连接字符串中的用户名是Azure SQL的管理员账号(格式通常为{服务器名}\{管理员用户名})
  • 检查Azure SQL数据库状态为“在线”

内容的提问来源于stack exchange,提问作者Nivin Viraj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:45:36