我使用 C# 和 Entity Framework 构建了一个 WinForms 应用程序。数据全部在SQL Server中。我可以验证连接字符串是否正确引用该数据库并返回预期的数据。当我在 VS 中运行它时,甚至直接运行输出时,一切都正常。
当我将其部署为 ClickOnce 应用程序时,问题就出现了。突然间,我遇到了以下异常:
System.ArgumentException: Invalid value for key 'attachdbfilename'.
当我搜索此错误时,大多数结果似乎与 a) asp 应用程序和/或 b) 有关应用程序试图连接到不存在的 localdb 实例的事实。
我已经将问题本地化为数据上下文的初始化。不过调试起来有点困难,因为它在 VS 中运行良好。
就其值(value)而言,我的连接字符串设置为以下内容(在我的数据模型库项目和 winforms 项目的 App.Config 文件中):
<parameter value="Server=ARUK-SRV2;Data Source=ARUK-SRV2\ARUKSQL;Initial Catalog=TPS;Integrated Security=True" />
有人以前遇到过这个吗?有人有任何修复它的建议吗?
最佳答案
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">
谢谢指点!
关于c# - 为什么我的 ClickOnce 应用程序可能会尝试连接到 localdb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32243884/