如何将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
相关产品推荐
相关产品推荐

