我得到异常
基础提供程序在ConnectionString上失败。
内部异常
密钥"attachdbfilename"的值无效
在windows7家庭高级虚拟机上,我正在尝试部署和调试我的应用程序。
然而,在我的开发机器上,应用程序启动时没有出现问题。
连接字符串为:
<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在本主题中提到连接字符串包含垃圾:ConnectionString 上的基础提供程序失败
然而,正如Maxim Gueivandov所回答的,这应该是有效的连接字符串,因为它是由EntityFramework的edmx设计器直接生成的。至少,我相信它是有效的,因为它确实在开发机器上工作。
同样在另一个主题(实体框架-底层提供程序在ConnectionString上失败)中,接受的答案是删除";并用";,由于字符串是c代码中的文字,但我的连接字符串仍然是xml,所以";不能简单地替换。在连接字符串上
虚拟机上安装的.NET版本是4.0.30319,MsSQL Server Express LocalDB是11.0.2318.0,所以我相信它们都是最新的。
编辑:如果我从连接字符串中删除"|DataDirectory|",我的开发机器上会出现以下错误:
无法将文件"AssetDatabase.mdf"附加为数据库"AssetDBSource"。
所以我也删除了"initial catalog=AssetDBSource",我得到了
尝试附加文件AssetDatabase.mdf的自动命名数据库失败。存在具有相同名称的数据库,或者指定的文件无法打开,或者它位于UNC共享上。
我可以重新设计这是因为它不知道去哪里看?因此,我为它提供了完整的路径(C:\AssetDatabase.mdf),它就可以工作了。
因此,剩下的问题是:如何获得使用LocalDB的相对路径?
我认为目标机器没有安装.NET 4的更新4.0.2或更高版本。.NET 4版本号可能会让人感到困惑,因为4.0.30319
版本似乎被所有.NET 4构建所使用。实际上,这并不意味着您的机器具有更新4.0.2。
您能否在目标计算机上安装.NET 4 Update 4.0.3(截至今天的最新.NET 4更新),看看问题是否消失?
或者只需验证更新是否已安装-只需在.NET 4中构建一个简单的应用程序,该应用程序使用SqlClient
使用连接字符串连接到LocalDB,并记录错误信息,以防您仍然遇到任何错误。EF错误消息相当一般,我不知道如何从底层SqlClient提供程序中获得详细的错误。
或者,您也可以将其迁移到.NET 4.5。