WCF&Entity Framework&SQL Server - “在打开时底层提供程序失败”

3
我能够成功地通过WCF测试客户端运行测试,但是当我尝试使用Entity Framework获取数据时出现了问题。
为了确保自己没有做任何愚蠢的事情,我从这个教程中下载了示例代码,它正在做类似的事情:http://www.codeproject.com/KB/WCF/WCFandEF.aspx ...当我运行它时,我在一个类似的地方得到了相同的错误。
var productEntity = (from p in context.ProductEntities 
                     where p.ProductID == id
                     select p).FirstOrDefault();

错误信息为:

底层提供程序在打开时失败。

我可以使用相同的连接字符串从“正常应用程序”中成功打开数据库,但在从WCF测试客户端访问数据库时似乎出现了问题。
在这里和Google上研究“底层提供程序在打开时失败。”通常表示这是连接字符串的问题,但我很确定这不是本例中的问题。
所以现在我认为这是某种权限问题。
我正在使用SQL Server和Windows 7,以及Visual Studio 2010。
自昨天以来我一直在苦苦思索,因此非常感谢任何帮助或保护头盔。
编辑以包括连接字符串。
<add name="NorthwindEntities" 
     connectionString="metadata=res://*/Northwind.csdl|res://*/Northwind.ssdl|res://*/Northwind.msl;provider=System.Data.SqlClient;provider
connection string=&quot;Data Source=localhost;Initial Catalog=Northwind;User ID=sa;MultipleActiveResultSets=True&quot;" 
     providerName="System.Data.EntityClient" />

1
你能分享一下你的连接字符串吗? - flipchart
你是否同时启用了“初始化器中的删除数据库”并打开了MS SQL Management Studio?这会导致此类异常,因为你不能在这种情况下删除数据库,从而使EF失败退出。 - user604613
@flipchart - 我已经编辑了上面的内容,添加了 - Positonic
@UrbanEsc - 我不太明白你的意思,所以我关闭了SQL Server Studio并尝试了一遍,但没有成功。还是谢谢你。 - Positonic
连接字符串中 sa 用户没有密码。 - Ladislav Mrnka
4个回答

5
这个错误意味着你的连接字符串存在问题。
创建一个确保可工作的连接字符串的好方法是创建一个新的(虚拟)项目,添加Entity Framework数据模型,选择“从数据库生成模型”,选择所需的连接,然后单击“测试连接”以确保它有效。
确保勾选了“在App.Config中保存实体连接设置...”。
然后,在你的web/app.Config中,你将得到一个连接字符串,可以复制+粘贴到你自己的项目中。

1
请注意,“The underlying provider failed on Open”也可能是由于授权问题引起的。内部异常将说明是否为此情况。一个可能发生这种情况的例子是当UAC开启且数据文件存储在“Program Files”目录中时。 - teynon

1

1

我遇到了同样的错误好几天...实际上是两天,但是我找到了解决方案,感谢真主...

对于我来说...我在实体服务连接中设置了Windows身份验证。所以我去了IIS 7应用程序池高级设置,为Web服务更改了身份标识...将身份从“ApplicationPoolIdentity”更改为“Network Service”,并设置了我的当前用户名和密码。

我可能以后会遇到其他问题,但我仍然要说好的开始 :-)!


0

我是通过移除 "integrated security=True;" 来解决这个问题的。


我在问题中没有看到 integrated security=True;。你能否详细说明并使你的答案更清晰易懂? - Edgar H
你应该删除集成安全并添加用户ID和密码。这是我的连接字符串:<connectionStrings><add name="PettyDBEntities" connectionString="metadata=res://*/PettyModel.csdl|res://*/PettyModel.ssdl|res://*/PettyModel.msl;provider=System.Data.SqlClient;provider connection string="data source=WIN-COO1ETVI1E6;initial catalog=PettyDB; **integrated security=True;** User ID=admin;Password=password;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /></connectionStrings></configuration> - Hasan Batuhan Kurt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接