我使用。mdf来连接数据库和entityClient。现在我想改变连接字符串,这样就不会有.mdf文件了。

下面的connectionString是否正确?

<connectionStrings>
   <!--<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQL2008;AttachDbFilename=|DataDirectory|\NData.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />-->
   <add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQL2008;Initial Catalog=NData;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

因为我总是得到错误:

基础提供程序在Open上失败


当前回答

我在这里发布了一个类似的问题,使用托管在亚马逊RDS上的SQL 2012数据库。问题是在连接字符串-我有“应用程序名称”和“应用程序”属性在那里。一旦我把它们拿掉,它就起作用了。

实体框架5和Amazon RDS——“底层提供者在Open上失败了。”

其他回答

我犯了这个错误,并找到了一些解决方案:

查看连接字符串,它看起来是有效的。我发现了这篇博客文章,这里的问题是他们使用了集成安全系统。如果您在IIS上运行,您的IIS用户需要访问数据库。

如果您使用实体框架与事务,实体框架自动打开和关闭连接与每个数据库调用。因此,在使用事务时,您试图将事务分散到多个连接上。这提升到MSDTC。

(更多信息请参见参考资料。)

更改我的代码如下固定:

using (DatabaseEntities context = new DatabaseEntities())
{
    context.Connection.Open();
    // the rest
}

我有这个问题,因为应用程序池登录这个应用程序正在运行下已经改变。

在IIS:

通过单击站点并进入基本设置来查找应用程序池。 进入应用程序池。 单击站点的应用程序池。 单击高级设置。 在“身份”中输入帐号登录名和密码。 重新启动站点并重试。

我有这个错误突然发生在我们的一个网站上。在我的例子中,结果是SQL用户的密码过期了!在SQL Server Management Studio中取消密码过期框是有效的!

如果还原数据库时用户已经存在,且模式不同,导致无法分配正确的权限,也会发生这种情况。

要纠正此运行:

USE your_database
EXEC sp_change_users_login 'Auto_Fix', 'user', NULL, 'cf'
GO
EXEC sp_change_users_login 'update_one', 'user', 'user'
GO

context.Connection.Open()没有帮助解决我的问题,所以我尝试在DTC配置中启用“允许远程客户端”,没有更多的错误。

在windows 7中,您可以通过运行dcomcnfg,组件服务->计算机->我的计算机->分布式事务协调器->右键单击本地DTC ->安全来打开DTC配置。