2

我得到了例外

基础提供程序在 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 underscient provider failed on ConnectionString

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

同样在另一个主题(实体框架 - ConnectionString 上的基础提供程序失败)中,接受的答案是删除“ 并用 \" 替换它们,因为该字符串是 c# 代码中的文字,但我仍然在 xml 中有我的连接字符串,所以不能简单地替换 "。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 的相对路径?

4

1 回答 1

3

我相信目标机器没有安装 .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。

于 2013-02-04T21:27:54.260 回答