Entity Framework无法连接SQL Server数据库问题求助
Blazor + EF Core 迁移失败问题解决
问题重现
- 将连接字符串存入JSON配置文件时,执行
update-database无报错,但数据库未生成任何表 - 直接将连接字符串硬编码到
options.UseSqlServer()时,触发错误:
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: 26 - Error Locating Server/Instance Specified)
连接字符串:
Data Source = Desktop-UGF6TEE\MyDataSource; Integrated Security = True; Connect Timeout = 30; Encrypt = False; Trust Server Certificate = False; Application Intent = ReadWrite; Multi Subnet Failover = False
解决步骤
1. 修正JSON配置中的连接字符串转义问题
JSON解析器会将单个反斜杠\视为转义符,因此连接字符串中的实例名反斜杠必须改为双反斜杠\\。修改后的配置示例:
"ConnectionStrings": { "DefaultConnection": "Data Source = Desktop-UGF6TEE\\MyDataSource; Integrated Security = True; Connect Timeout = 30; Encrypt = False; Trust Server Certificate = False; Application Intent = ReadWrite; Multi Subnet Failover = False" }
2. 确保EF上下文正确读取配置
在Program.cs中确认DbContext是从配置文件读取连接字符串,而非硬编码错误内容:
builder.Services.AddDbContext<YourDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
3. 验证SQL Server实例的可访问性
- 打开命令提示符,执行
sqlcmd -S Desktop-UGF6TEE\MyDataSource -E,若能进入SQL命令行则实例可访问;若报错:- 检查**SQL Server (MyDataSource)**服务是否已启动(可在Windows服务列表中查找)
- 确认SSMS中连接的服务器名称确实是
Desktop-UGF6TEE\MyDataSource - 启动SQL Server Browser服务(命名实例需要该服务来广播实例信息)
4. 明确指定目标数据库
连接字符串中必须添加Initial Catalog参数,指定你在SSMS中创建的空数据库名称,否则EF可能默认连接到master数据库:
Data Source = Desktop-UGF6TEE\\MyDataSource; Initial Catalog = YourEmptyDatabaseName; Integrated Security = True; Connect Timeout = 30; Encrypt = False; Trust Server Certificate = False; Application Intent = ReadWrite; Multi Subnet Failover = False
5. 硬编码连接字符串的转义处理
若必须硬编码到代码中,C#字符串的反斜杠同样需要转义,实例名需写成Desktop-UGF6TEE\\MyDataSource:
options.UseSqlServer("Data Source = Desktop-UGF6TEE\\MyDataSource; Initial Catalog = YourEmptyDatabaseName; Integrated Security = True; ...");
6. 验证迁移执行细节
执行update-database -Verbose,查看详细输出,确认:
- EF使用的连接字符串是否正确
- 迁移脚本是否正确生成并执行
- 是否有隐藏的权限或数据库不存在的错误
内容的提问来源于stack exchange,提问作者Abdul
相关产品推荐
相关产品推荐

