1

我正在寻找一些关于构建自包含服务的最佳实践建议,即具有所有域逻辑和数据层的 DLL。我想使用一个关闭的自我 CMS,例如 orchard,然后与服务进行对话以进行 CRUD 操作。该服务应该有自己的 IOC 和 ORM,在这种情况下,我使用的是 Ninject 和实体框架。在这个设计中,我将拥有一个与 CMS 不同的数据库,并且可以在需要时将其移植到其他 CMS 系统。

CMS 应该启动服务并向其传递连接字符串或文件名。如果我使用 orchard,它有不同的 ORM 和 IOC 框架,所以这导致我想要将 Ninject 和 Entity Framework 保留在服务中。

我已经设置了一个实验,其中 DbConext 和域位于服务 DLL 中,我从控制台应用程序中调用它。这仅在我在控制台应用程序中引用了实体框架时才有效,即使我没有在该 dll 中使用它。这是控制台应用程序未引用 EF 时的错误消息。

没有为“System.Data.SqlClient”ADO.NET 提供程序找到实体框架提供程序。

为什么会这样以及如何最好地解决我的设计问题?

4

1 回答 1

0

如果您的库 (DLL) 依赖于实体框架,那么您需要在应用程序中引用这两者是完全正常的(无论是控制台、Web 还是其他任何东西)。您总是需要引用所有依赖项。

使用 Orchard 连接您的自定义库将非常简单。您在 Orchard 方面唯一需要做的就是使用 Autofac 注册来自您的库的服务,以便让它们可用于依赖注入。这篇文章描述了与您类似的场景。

请记住,在 Orchard <= 1.6 中使用多个数据库连接有点麻烦,因为使用TransactionScope- 您需要在抑制范围内运行所有自定义数据库代码,否则您会遇到事务错误和/或 MSDTC相关的问题。自从 Orchard 1.7 将在大约一周内到达后,这将不再是问题。我强烈建议等待新版本。1.x您还可以从分支获取预发布代码。

于 2013-06-17T12:08:59.830 回答