我正在寻找关于构建自包含服务的一些最佳实践建议,即具有所有域逻辑和数据层的DLL。我想使用一个关闭自己的CMS,如果园,然后与服务部门进行CRUD操作。该服务应该拥有自己的IOC和ORM,在这种情况下我使用的是Ninject和Entity Framework。在此设计中,我将拥有一个独立于CMS的数据库,并可在需要时将其移植到其他CMS系统。
CMS应该启动该服务并向其传递连接字符串或文件名。如果我使用orchard它有不同的ORM和IOC框架,那么这导致我想要将Ninject和Entity Framework保留在服务中。
我已经设置了一个实验,其中DbConext和域位于服务DLL中,我从控制台应用程序调用它。这只有在我在控制台应用程序中引用实体框架时才有效,即使我没有在该dll中使用它。以下是控制台应用程序未引用EF时的错误消息。
找不到'System.Data.SqlClient'ADO.NET提供程序的实体框架提供程序。
为什么这样以及如何最好地解决我的设计问题?
答案 0 :(得分:0)
如果您的库(DLL)依赖于Entity Framework,那么您需要在应用程序中引用它们(无论是控制台,Web还是其他任何内容)都是完全正常的。您始终需要引用所有依赖项。
将您的自定义图书馆与Orchard连接起来很简单。您在Orchard方面唯一需要做的就是使用Autofac注册来自您的库的服务,以便让它们可用于依赖注入。 This post描述了与您类似的场景。
请记住,在Orchard< = 1.6中使用多个数据库连接有点麻烦,因为使用了TransactionScope
- 您需要在抑制范围内运行所有自定义数据库代码,否则你有交易错误和/或与MSDTC相关的问题。自从Orchard 1.7开始大约一周后,这将是一个非问题。我强烈建议您等待新版本。您还可以从1.x
分支获取预发布代码。