FluentNHibernatePatternsforIHttpModuleandConsoleApplications我目前正在开发一个C#MVC2web应用程序,在RepositoryPattern中使用FluentNHibernate(+LINQ),并使用Ninject来处理存储库中传递的MVC控制器的构造函数要求。我的FluentNHibernate代码目前已连接到IHttpModule,因此可以使用Web请求打开和关闭会话。在我尝试将我的域模型挂接到控制台应用程序之前,这非常有用。首先,我决定将我的数据库逻辑移到我的领域模型中。我猜这是不好的行为,但我是来这里寻求代码设计帮助的,所以请随时提出建议。我想这样做是因为我想在此域模型之上编写一个控制台应用程序+网络应用程序,而不关心数据存储在何处以及如何存储。也许我应该有一个单独的“基础设施”项目,它使用领域模型来实现特定的实现?回到问题……我遇到了一个问题,似乎FluentNHibernate的GetCurrentSession()假设您正在使用网络-它崩溃了,我在NH代码中得到了一些提到WebSession的回溯。作为参考,代码在这里:https://github.com/cthielen/RightsManagement。我很抱歉不够具体;我正在寻找有关如何最好地处理FNH+Linq的存储库模式的代码设计建议,该模式适用于Web和控制台应用程序-并询问我的数据库连接(即NHlogic)是否应该在域项目中。这是一个很好的问题。有许多不同的方法可以解决这个问题,但每个答案都取决于您对不同方法的体验。例如,您熟悉TDD吗?依赖注入?国际奥委会容器?等。我现在能给出的最好建议是清理所有现有的类,这样它们就不会依赖于上下文。这方面的一个例子是修改您的存储库类,以便它们将ISession对象作为构造函数参数,而不是依赖于似乎仅在您处于HTTP上下文中时才存在的单独实例。这将允许您将会话创建逻辑重构到比域逻辑更高的级别。publicclassPeopleRepository{publicPeopleRepository(ISessionsession){//storesession}}就我而言,我将使用IoC容器来注入会话依赖项。我可以在任何类型的应用程序中使用这个容器,无论是基于Web的应用程序还是使用session-per-request模式的控制台应用程序。您需要做一些工作才能使NHibernate与这两个应用程序一起良好运行。挑战在于尽可能减少这项工作。我很乐意提供更多指导。让我知道。我经常使用会话对象来指示我要处理某事(这不是一个工作单元实现,因为我不会在某个时间点之前保存我的所有工作)使用(varsession=SessionFactory.Create()){//在这里完成所有工作}这是可行的,因为即使是控制台应用程序也有一个可以启动会话的起点(例如,当用户在控制台中编写命令时)。会话工厂有一个SessionCreated和一个SessionDestroyed事件,可以被任何东西挂钩,在我们的例子中是一个nhibernate会话工厂。这是一个很好的抽象方式来获得对数据库连接的支持,或者任何不使用硬依赖的东西都会用到并且需要了解更多关于C#的学习教程。希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
