ConnectionString(| DataDirectory |和LocalDB)上的底层提供程序失败

时间:2013-02-04 20:58:01

标签: sql-server entity-framework-4 connection-string localdb

我得到了例外

  

基础提供程序在ConnectionString上失败。

内部异常

  

键'attachdbfilename'

的值无效

在Windows 7家庭高级虚拟机上,因为我正在尝试部署和调试我的应用程序。

但是,在我的开发机器上,应用程序启动时没有问题。

连接字符串是:

<add name="AssetsLocalDBEntities" connectionString="metadata=res://*/AssetsLocalDB.csdl|res://*/AssetsLocalDB.ssdl|res://*/AssetsLocalDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(localdb)\v11.0;attachdbfilename=|DataDirectory|\AssetDatabase.mdf;initial catalog=AssetDBSource;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Steve Wellens在本主题中提到连接字符串包含垃圾: The underlying provider failed on ConnectionString

然而,正如Maxim Gueivandov回复的那样,这应该是有效的连接字符串,因为它是由EntityFramework的edmx设计器直接生成的。 至少,我相信它是有效的,因为它在开发机器上起作用。

另外在另一主题(Entity Framework - The underlying provider failed on ConnectionString)中,接受的答案是删除&amp; quot;并用\“替换它们,因为字符串是c#代码中的文字,但我仍然在xml中有我的连接字符串,因此&amp; quot;不能简单地替换。 on-connectionstring

虚拟机上安装的.NET版本为4.0.30319,MsSQL Server Express LocalDB为11.0.2318.0,所以我相信它们都是最新的。

编辑:如果我删除“| DataDirectory |”从连接字符串我在我的开发机器上得到以下错误:

  

无法将文件'AssetDatabase.mdf'作为数据库'AssetDBSource'附加。

所以我也删除了“初始目录= AssetDBSource”,我得到了

  

尝试为文件AssetDatabase.mdf附加自动命名的数据库失败。存在具有相同名称的数据库,或者无法打开指定的文件,或者它位于UNC共享上。

我可以通过电子邮件发送这是因为它不知道在哪里看?所以,我提供了完整的路径(C:.. \ AssetDatabase.mdf),它可以工作。

所以问题的其余部分是:我如何获得使用LocalDB的相对路径?

1 个答案:

答案 0 :(得分:3)

我认为目标计算机没有安装.NET 4的Update 4.0.2或更高版本。 .NET 4版本号可能令人困惑,因为版本4.0.30319似乎被所有.NET 4版本使用。实际上,这并不意味着您的计算机具有Update 4.0.2。

您可以在目标计算机上安装.NET 4 Update 4.0.3(截至今天的最新.NET 4更新)并查看问题是否消失?

或者只是验证安装了更新 - 只需在.NET 4中构建一个简单的应用程序,使用SqlClient使用连接字符串连接到LocalDB,并记录错误信息,以防您仍然遇到任何错误。 EF错误消息非常通用,我不知道如何从底层的SqlClient提供程序中获取详细错误。

或者您也可以将其迁移到.NET 4.5。