.NET Core 6执行Scaffold-DbContext时遇SNI_PN11错误25
问题重现
执行的DbContext脚手架命令:
Scaffold-DbContext "Server=IN-PG0351TV\MSSQLSERVER;Database=LearnDB;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
触发的错误提示:
Error Number:87,State:0,Class:20
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SNI_PN11, error: 25 - Connection string is not valid)
已确认服务器和实例名称正确、实例处于运行状态,但问题仍未解决。
排查与解决方案
1. 修正连接字符串的转义问题
在PowerShell或Package Manager Console中,反斜杠\属于特殊字符需要转义,可通过两种方式处理:
# 方式1:转义反斜杠 Scaffold-DbContext "Server=IN-PG0351TV\\MSSQLSERVER;Database=LearnDB;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models # 方式2:用单引号包裹连接字符串 Scaffold-DbContext 'Server=IN-PG0351TV\MSSQLSERVER;Database=LearnDB;Trusted_Connection=True;' Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
2. 启用SQL Server的TCP/IP协议
- 打开SQL Server配置管理器,定位到目标实例(MSSQLSERVER)。
- 展开SQL Server网络配置,启用TCP/IP协议。
- 双击TCP/IP协议,进入IP地址选项卡,确保
IPAll下的TCP端口设置为1433(默认端口),之后重启SQL Server服务。
3. 验证Windows身份验证权限
确认当前执行命令的Windows账户对LearnDB数据库拥有读取权限(至少分配db_datareader角色),可通过SQL Server Management Studio登录实例后检查权限配置。
4. 测试基础连通性
用sqlcmd命令测试底层连接是否正常:
sqlcmd -S IN-PG0351TV\MSSQLSERVER -d LearnDB -E
若能成功进入SQL交互界面,说明连接本身无问题,需重点排查脚手架命令的格式问题。
5. 同步EF Core工具与包版本
确保全局安装的EF Core工具版本和项目中Microsoft.EntityFrameworkCore.SqlServer包版本一致,执行以下命令更新工具:
dotnet tool update --global dotnet-ef
内容的提问来源于stack exchange,提问作者Saumya Patel

