首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在洋葱架构中管理NHibernate会话

在洋葱架构中管理NHibernate会话
EN

Stack Overflow用户
提问于 2012-08-01 01:57:19
回答 2查看 742关注 0票数 1

我正在尝试将NHibernate设置为处理每个web请求的会话。我有一个项目,可以在使用我的任何存储库时初始化我的会话。我想知道如何根据每个web请求来管理我的会话。因为我的架构是解耦的,所以我希望避免在我的web项目中打开会话和关闭会话。有没有一种好的方法来处理这个问题,而不需要web项目知道NHibernate的存在?

这是我的请求流程:

Web Request -> ASP.NET MVC 3 ->控制器->服务数据库存储库(打开会话) -> NHibernate ->数据库->返回MVC并传出。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-01 02:36:49

看一看S#arp架构。它是一个框架,包装了NHibernate并为您提供了它,以及其他一些特性。你也可以使用一个依赖注入容器,比如Castle、Windsor或Ninject。(S#arp使用城堡温莎)。

如果您希望自己完成此操作,则需要创建一个HttpModule,以便在每个web请求开始和结束时为您打开和关闭会话。在请求开始时,模块将打开一个会话,并将其隐藏在HttpContext.Items中,这是每个web请求的存储。在处理请求时,您的存储库将从此处获取会话。(对于整洁的设计,创建存储库使用的接口ISessionManager,以及访问按请求存储的实现。那么它就是可单元测试的。)最后,模块将在请求结束时刷新并关闭会话。我曾经在一个NHibernate项目中这样做过一次,虽然它很有教育意义,但也有很多工作要做。

S#arp是一个大型框架,它规定了大量的应用程序结构。如果你不想走得那么远,可以看看Castle Windsor,为你干净利落地抽象出来。您所需要做的(或多或少)就是配置容器,使用每个请求的NHibernate会话对象作为构造函数参数来实例化存储库。如果您真的想了解如何构建自己的HttpModule,但我建议您在生产环境中使用框架。

票数 2
EN

Stack Overflow用户

发布于 2012-08-01 20:15:57

这是一篇很棒的文章,介绍了如何使用IoC容器(Castle Windsor) http://blog.xelibrion.com/journal/2011/4/16/nhibernate-session-management-in-aspnet-mvc-application.html实现会话/请求

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11746188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档