Entity Framework连接Visual Studio内置SQL Server (localdb)失败求助
问题描述
我通过Visual Studio运行了一个SQL Server本地实例:
该实例处于正常运行状态,我可通过UI界面查看数据库内的数据。
我的App.config配置内容如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/> </configSections> <connectionStrings> <add name="EntitiesContext" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=master;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" providerName="System.Data.SqlClient"/> <add name="DefaultConnection" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=master;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" providerName="System.Data.SqlClient" /> </connectionStrings> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="mssqllocaldb" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/></startup> </configuration>
我的EntitiesContext配置如下:
当前程序持续连接失败,抛出如下错误信息,恳请帮忙排查我遗漏了哪些配置项:
System.Data.SqlClient.SqlException:“建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。请验证实例名称是否正确,且SQL Server已配置为允许远程连接。(provider: Named Pipes Provider, error: 40 - 无法打开到SQL Server的连接)”
内部异常
Win32Exception:系统找不到指定的文件
排查解决方案
- 确认LocalDB实例名匹配
先在Visual Studio的SQL Server对象资源管理器中右键运行中的实例查看属性,确认实例名是否为MSSQLLocalDB,如果不是,将连接字符串里Data Source=(localdb)\MSSQLLocalDB的实例名部分替换为实际名称。 - 修复连接字符串转义问题
如果你的EntitiesContext代码中存在硬编码的连接字符串,C#中反斜杠需要转义,要么写成(localdb)\\MSSQLLocalDB,要么在字符串前加@符号写成@"(localdb)\MSSQLLocalDB",否则反斜杠会被识别为转义符导致实例名解析错误,触发找不到文件的内部异常。 - 修正EntitiesContext构造函数配置
确保EntitiesContext的构造函数明确指定读取配置文件中的连接字符串,写法如下:
未加public EntitiesContext() : base("name=EntitiesContext") { }name=前缀时,EF会将传入的参数当成数据库名称,自动创建新的LocalDB实例,而非连接你已运行的目标实例。 - 确认目标数据库名称正确
你当前连接字符串默认指向master系统库,如果你要连接自己创建的业务数据库,需要将Initial Catalog的值修改为实际的数据库名称。 - 强制使用TCP协议连接
可在连接字符串末尾添加;Network Library=dbmssocn强制走TCP连接,避免Named Pipes Provider抛出40错误。 - 验证LocalDB运行状态
打开命令提示符执行sqllocaldb i MSSQLLocalDB查看实例状态,如果为停止状态,执行sqllocaldb s MSSQLLocalDB启动实例。
内容的提问来源于stack exchange,提问作者R-nold
相关产品推荐
相关产品推荐

