如何更新ASP.NET Entity项目连接字符串?连接字符串metadata缺失报错求助
解决ASP.NET Entity项目连接字符串更新及metadata缺失问题
看样子你是在用Entity Framework的数据库优先/模型优先模式(也就是带EDMX文件的那种),这种模式的连接字符串和普通SQL Server的连接字符串完全不一样,这就是你改完之后出现metadata错误的核心原因。
先给你理清楚两个错误的根源:
- 最开始的
The underlying provider failed on Open.:本质是原来的连接字符串没法正常连接到你的本地SQL Server,大概率是实例名、数据库名或者身份验证信息不对。 - 后来的metadata缺失错误:因为EF的EDMX模式必须靠
metadata关键字指定模型的三个核心文件(CSDL概念模型、SSDL存储模型、MSL映射文件),你改成普通SQL连接字符串后把这部分丢了,所以直接报错。
正确的EDMX连接字符串格式
你需要用这种结构的连接字符串,对应到你的Northwind项目:
<add name="Northwind" connectionString="metadata=res://*/App_Code.Northwind.csdl|res://*/App_Code.Northwind.ssdl|res://*/App_Code.Northwind.msl;provider=System.Data.SqlClient;provider connection string="data source=YOUR_LOCAL_SQL_INSTANCE;initial catalog=Northwind;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
关键部分详解
- metadata:这部分绝对不能少,
res://*/表示从项目程序集中查找模型文件,后面的App_Code.Northwind要和你EDMX生成的文件名对应(如果你的EDMX在App_Code文件夹下,名叫Northwind.edmx,那这个路径就没问题)。 - provider connection string:这里面才是你本地SQL Server的实际连接信息,需要改成自己的配置:
data source:填你的本地SQL Server实例名,比如.,localhost,.\SQLEXPRESS(如果你装的是SQL Server Express版本)。initial catalog:数据库名,直接填Northwind就行。integrated security=True:用Windows身份验证登录SQL Server;如果要用SQL账号登录,改成user id=你的SQL用户名;password=你的密码;。- 注意里面的引号要用
"转义,因为是在XML属性里,直接用双引号会报错。
- providerName:必须设为
System.Data.EntityClient,不能用普通的System.Data.SqlClient,这也是很多人踩坑的点。
修改步骤
- 打开项目里的Web.config文件,找到
<connectionStrings>节点。 - 把原来的Northwind连接字符串替换成上面的格式,重点修改
provider connection string里的SQL Server信息。 - 保存配置后,先拿SQL Server Management Studio测试一下
provider connection string里的内容能不能正常连接到本地Northwind数据库,确保这部分没问题。 - 再运行你的Web Forms应用,应该就能解决这两个错误了。
如果还是有问题,可以检查EDMX文件的生成路径是否和metadata里的App_Code.Northwind对应,或者右键EDMX文件选择「Validate」,看看模型有没有其他问题。
内容的提问来源于stack exchange,提问作者Massey
相关产品推荐
相关产品推荐

