0

我编写了一个(可能不必要地)分层的应用程序。有两个独立的应用程序,一个是 UI,一个是 Windows 服务;两者都有在共享项目中驱动应用程序的实际代码(因此当我更新应用程序的运行方式时,我不必同时更新 UI 和服务中的代码)。除了共享的操作代码,共享项目还包含基类和一个接口,该接口定义了其他插件模块(类项目)的API,可以添加、暂停、立即运行等。UI/服务所做的只是告诉每个插件运行,然后通过电子邮件发送每个插件生成的结果。

除了共享项目中的主要数据模型之外,我还希望能够在这些插件项目中生成单独的数据模型。这样做的原因是,我不想每次为插件添加新表时都必须重新安装我的服务;通过将数据模型保留在插件中,我可以刷新插件并让服务或 UI 保持运行。我无法通过“在配置中找不到指定的命名连接,不打算与 EntityClient 提供程序一起使用,或者无效。” 错误。我已经将插件的连接字符串从它的 app.config 文件复制到共享项目的 app.config 文件和 UI 的 app.config 文件。我什至将 .edmx 文件从插件复制到共享项目和 UI 项目。然而我' 我仍然想出这个错误。我想知道它是否与连接字符串中引用的 .csdl、ssdl 和 .msl 文件有关(例如。res://*/ATS.csdl)。我在拥有 .edmx 文件的所有三个项目的目录中都看到了这些文件\obj\Debug\edmxResourcesToEmbed,但是尽管我知道要复制的每条信息都在我想复制的任何地方,但我仍然无法使用我的插件连接到数据库. 有任何想法吗?

ETA:我发现如果我从 app.config 文件中逐字复制连接字符串并在创建新实体对象时指定它,它会成功创建连接并能够查询数据库。所以似乎某个地方的某些 app.config 没有连接字符串,但所有应该需要它的地方都有它。

ETA 2:我打开了符号调试并挖掘了System.Data.EntityClient.EntityConnection它失败的确切部分。它正在查看ConfigurationManager.ConnectionStrings集合,但_items成员(我希望它包含我的app.config文件中列出的所有连接字符串)仅包含 SQLEXPRESS 数据库的“LocalSqlServer”条目。所以当然,当它尝试在我指定的名称下查找连接字符串时,它不能,因为它正在读取的任何配置文件都不包含它。仍在寻找一种方法来使这项工作正常......

4

1 回答 1

0

我想我解决了这个问题,虽然这是一个笨拙的解决方案,我很想看看是否可以更优雅地完成。然而,多亏了 Kamyar 的提示,我最终做了以下事情:

在我的符号调试中,我开始在课堂上四处寻找EntityConnection,我注意到 .NET 并没有像我认为的那样从我的配置文件中提取连接字符串。Kamyar 建议为插件创建一个.dll.config文件,我这样做了,但它仍然没有工作......但只是因为实体框架正在寻找主机可执行文件的配置文件,而不是插件 dll。因此,我将主机应用程序的app.config文件复制到加载我的独立插件的目录中,将其命名为[Application].exe.config,然后它立即将其拾取。

我想知道是否有更好的方法,在某个地方我可以指定一个我的所有插件都应该引用的配置文件,而不是主机配置文件的副本,但我很高兴不必指定连接字符串在我的代码中。

于 2012-08-02T14:32:26.103 回答