插件dll使用自己的实体框架

时间:2012-07-27 15:09:42

标签: vb.net entity-framework

我写了一个应用程序(可能是不必要的)在几个级别上分层。有两个独立的应用程序,一个是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”条目数据库。所以当然当它尝试在我指定的名称下找到连接字符串时,它不能,因为它正在读取的任何配置文件都不包含它。仍在寻找使这项工作正常的方法......

1 个答案:

答案 0 :(得分:0)

我认为我解决了这个问题,虽然这是一个愚蠢的解决方案,我很想知道是否可以更优雅地完成。然而,这是我最终做的事情,感谢Kamyar的暗示:

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

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