Contoso University项目中context.Database.EnsureCreated()遇SQL Server连接错误求助
错误信息翻译
Microsoft.Data.SqlClient.SqlException: '建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。请验证实例名称是否正确,并且SQL Server配置为允许远程连接。(提供程序: SNI_PN11, 错误: 50 - 本地...)
排查与解决步骤
检查连接字符串配置
打开appsettings.json,确认SchoolContext的连接字符串格式正确:- 本地DB实例:
"Server=(localdb)\\mssqllocaldb;Database=ContosoUniversity;Trusted_Connection=True;MultipleActiveResultSets=true" - SQL Server Express实例:
"Server=.\SQLEXPRESS;Database=ContosoUniversity;Trusted_Connection=True;MultipleActiveResultSets=true"
要和你本地安装的SQL Server实例名称完全匹配,自定义实例名需替换成对应值。
- 本地DB实例:
确认SQL Server服务运行状态
按Win+R输入services.msc打开服务列表,找到对应SQL Server实例(比如SQL Server (MSSQLLOCALDB)或SQL Server (SQLEXPRESS)),确保服务处于正在运行状态,未运行则右键启动。检查SQL Server连接配置
打开SQL Server配置管理器,依次进入SQL Server网络配置 -> 目标实例的协议,确保TCP/IP和命名管道已启用,修改后重启SQL Server服务生效。如果SSMS都连不上本地实例,优先排查这一步。修正数据库初始化逻辑
代码里的context.Database.EnsureCreated()只会直接创建数据库,不会应用EF迁移。如果要用迁移初始化,替换成:context.Database.Migrate();前提是你已经通过
Add-Migration InitialCreate命令生成了迁移文件。验证用户权限
本地开发用Windows身份验证(Trusted_Connection=True)时,确保当前运行项目的用户拥有创建SQL Server数据库的权限。
内容的提问来源于stack exchange,提问作者Boris Ionut

