我得到了例外
基础提供程序在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="data source=(localdb)\v11.0;attachdbfilename=|DataDirectory|\AssetDatabase.mdf;initial catalog=AssetDBSource;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" 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的相对路径?
答案 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。