【问题标题】:Why might my ClickOnce application try to connect to localdb?为什么我的 ClickOnce 应用程序可能会尝试连接到 localdb?
【发布时间】:2015-11-21 12:16:56
【问题描述】:

我使用 C# 和实体框架构建了一个 WinForms 应用程序。数据都在 SQL Server 中。我可以验证连接字符串是否正确引用了这个数据库并返回了预期的数据。当我在 VS 中运行它时一切正常,甚至我直接运行输出。

当我将它部署为 ClickOnce 应用程序时,问题就开始了。突然之间,我收到以下异常:

System.ArgumentException:键“attachdbfilename”的值无效。

当我搜索此错误时,大多数结果似乎是关于 a) asp 应用程序和/或 b) 关于应用程序试图连接到不存在的 localdb 实例的事实。

我已经将问题本地化为我的数据上下文的初始化。虽然有点难以调试,因为它在 VS 中运行良好。

不管怎样,我的连接字符串设置如下(在我的数据模型库项目和 winforms 项目的 App.Config 文件中):

以前有人遇到过这种情况吗?有没有人有任何修复它的建议?

【问题讨论】:

  • 您的申请只能在线使用还是也可以离线使用?
  • @RezaAghaei 也​​离线 - 这会有所不同吗?我正在测试的机器肯定有一条通往数据库的开放线路。
  • 可能正在使用尝试使用本地数据库的旧版本部署。您是否尝试过从其发布页面运行应用程序?增加版本并在发布设置中指定所需的版本并发布应用程序和测试结果。您也可以从控制面板卸载应用程序并安装新版本。
  • @RezaAghaei 已经尝试了所有这些。奇怪的是,在我尝试部署为 ClickOnce 之前很久,我就从 localdb 转移到了 SQL 服务器
  • Ctrl-F,在整个解决方案中搜索attachdbfilename

标签: c# sql-server winforms entity-framework clickonce


【解决方案1】:

Sam Axe's comment 建议搜索 attachdbfilename。这导致了 0 个结果,但确实给了我一个想法。我搜索了“localdb”并找到了三个匹配项 - 每个 App.Config 文件中都有一个。

虽然我已将连接字符串更改为指向我们的 SQL Server 实例,但我已将默认连接工厂设置为 LocalDbConnectionFactory。 (天啊!)

David Obando 有一个blog post explaining what needs to be changed。本质上就是改变

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">

感谢指点!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 2017-07-31
    相关资源
    最近更新 更多