Code First下Update-Database连接Azure SQL遇Authentication关键字不支持问题
解决Azure SQL数据库EF Core迁移时的认证错误问题
我来帮你搞定这个困扰你的EF Core迁移错误!你遇到的两个问题其实都是SQL Server驱动版本和认证配置不匹配导致的,下面一步步给你解决:
问题根源拆解
- 「Keyword not supported: 'authentication'」错误:你用的是旧版的
System.Data.SqlClient驱动,这个驱动不支持Azure SQL提供的Authentication连接字符串关键字——而Azure门户生成的连接字符串是针对新版Microsoft.Data.SqlClient驱动的。 - 「Cannot open server 'organisation.com' requested by the login」错误:移除
Authentication后,旧驱动会把你用户ID里@organisation.com的后缀当成SQL Server实例名称,自然找不到这个不存在的服务器,导致登录失败。
具体解决方案
1. 升级/安装正确的SQL Server驱动
首先确保你的项目用的是新版驱动:
- 打开NuGet包管理器,安装或更新
Microsoft.EntityFrameworkCore.SqlServer包(它会自动引入依赖的Microsoft.Data.SqlClient)。 - 或者直接安装
Microsoft.Data.SqlClient包到你的项目中。
2. 使用原始连接字符串(无需转义)
Azure门户给的连接字符串本身是正确的,你不需要额外转义Authentication里的单引号——在C#的双引号字符串中,单引号是合法字符,不会被当成字符串结束符:
services.AddDbContext<PwttContext>(options => options.UseSqlServer("Server=tcp:<serverName>.database.windows.net,1433;Initial Catalog=<databaseName>;Persist Security Info=False;User ID=<userId@organisation.com>;Password=<password>;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Authentication='Active Directory Password';"));
3. 备选方案:手动配置认证方式
如果还是遇到关键字不支持的问题,可以绕过连接字符串的关键字,直接在代码里指定认证方式:
services.AddDbContext<PwttContext>(options => { var connectionString = "Server=tcp:<serverName>.database.windows.net,1433;Initial Catalog=<databaseName>;Persist Security Info=False;User ID=<userId@organisation.com>;Password=<password>;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;"; var sqlConnection = new Microsoft.Data.SqlClient.SqlConnection(connectionString); // 明确指定用Active Directory密码认证 sqlConnection.Authentication = Microsoft.Data.SqlClient.SqlAuthenticationMethod.ActiveDirectoryPassword; options.UseSqlServer(sqlConnection); });
4. 检查程序包管理器控制台环境
最后确认一下:
- 控制台顶部的「默认项目」下拉菜单里选的是你的Web/API项目(不是类库项目)。
- 所有NuGet包都已经还原成功(可以右键项目选「还原NuGet包」)。
做完这些再执行Update-Database,应该就能顺利连接Azure SQL并完成迁移了!
内容的提问来源于stack exchange,提问作者Ray
相关产品推荐
相关产品推荐

