Nhibernate的Session如果每次都打开,关闭一次会很麻烦,如果忘记关闭Session,很容易就达到连接池的最大值,我们可以把他移动到实现IHttpModule的类中
在请求开始时初始化CoreRepository,并且放入每次请求缓存(HttpContent.Item)中
参考Cuyahoga的实现

using System;
using System.Web;

using VirtualBank.Service;

namespace VirtualBank.Web.HttpModules
{
    /**//// <summary>
    /// Http module that manages the NHibernate sessions during an HTTP Request.
    /// </summary>
    public class NHSessionModule : IHttpModule
    {
        /**//// <summary>
        /// Default constructor.
        /// </summary>
        public NHSessionModule()
        {
        }

        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(Context_BeginRequest);
            context.EndRequest += new EventHandler(Context_EndRequest);
        }

        public void Dispose()
        {
            // Nothing here    
        }

        private void Context_BeginRequest(object sender, EventArgs e)
        {
            // Create the repository for Core objects and add it to the current HttpContext.
            CoreRepository cr = new CoreRepository(true);
            HttpContext.Current.Items.Add("CoreRepository", cr);
        }

        private void Context_EndRequest(object sender, EventArgs e)
        {
            // Close the NHibernate session.
            if (HttpContext.Current.Items["CoreRepository"] != null)
            {
                CoreRepository cr = (CoreRepository)HttpContext.Current.Items["CoreRepository"];
                cr.CloseSession();
            }
        }
    }
}

在Web.config
中注册Module

<httpModules>
        <add type="VirtualBank.Web.HttpModules.NHSessionModule, VirtualBank" name="NHSessionModule" />
        </httpModules>

调用方法:
通常可以放到构造函数中
_coreRepository = HttpContext.Current.Items["CoreRepository"] as CoreRepository;
可以参考:
操作Nhibernate

通过实现IHttpModule初始化Nhibernate的Session相关推荐

  1. Nhibernate中session的状态与session.connection.state状态的差别的解释

    在项目中用到了nhibernate,但是需要判断数据连接的状态,在NHIbernate的文档中找了半天,英文的中文的都看了一遍,都没找到相关的说明 .后来在Hibernate的论坛上才找到了一些说明. ...

  2. php 7 class 初始化 销毁_在 PHP 中使用和管理 Session

    1.Session vs. Cookie 与 Cookie 一样,Session 技术也是用于解决 HTTP 协议无状态的问题,不过,与 Cookie 数据保存在客户端不同,Session 数据存储在 ...

  3. php 类初始化 session判断,thinkphp3.x中session方法的用法分析

    本文实例讲述了thinkphp3.x中session方法的用法.分享给大家供大家参考,具体如下: 一.Session方法用于Session 设置.获取.删除和管理操作. Session 用于Sessi ...

  4. spring.net nhibernate 分布布式事务(下)

    spring.net nhibernate 分布布式事务(下) 摘自: http://www.cnblogs.com/GoodHelper/archive/2010/07/30/SpringNetDi ...

  5. NHibernate中的API

    本篇文章介绍的是NHibernate的各种API及其作用. 下图描述了NHibernate的API在分层架构中的作用,下面将进行详细说明. NHibernate的接口大致分为四类: 1.  被应用程序 ...

  6. NHibernate初学者指南(15):使用LINQ to NHibernate提供程序查询数据

    在前面的<NHibernate初学者指南(8):增删查改>一文中简单的提到了查询一个实体的Get<T>和Load<T>方法以及查询实体列表的Query<T&g ...

  7. Welcome to NHibernate

    Welcome to NHibernate Wiki extracted from the original blog post of Gabriel Schenker 假如你正在阅读这篇文章,我们假 ...

  8. NHibernate学习手记(3) - NH的配置信息

    作为一种通用的持久层框架,NH可以通过配置来指定所使用的数据库类型,并且可根据不同的数据库调整NH的运行参数.这些配置信息通常保存在配置文件中,当数据库配置发生改变时,我们只需要修改配置文件即可,不需 ...

  9. 【转】NHibernate入门教程

    开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo 摘要: 热衷于开源框架探索的我发现A ...

最新文章

  1. asp vb 插入,更新,删除数据库操作。
  2. -32767转化为二进制_程序员需要了解的硬核知识之二进制
  3. os模块中的shutil的使用方式与方法
  4. python打包的exe开机自动启动(windows)
  5. NodeJS作为Web架构中间层的使用
  6. 教你玩转CSS 图像透明/不透明
  7. 怎么在activity里面操作listView的item里的组件的点击事件
  8. 使用Crash工具查看一个TCP listen sock内存布局实例
  9. 汇编语言 emu8086软件的安装和输出Hello,world
  10. 使用replaceAll()方法替换字符串中的反斜杠:左斜杠(\)和右斜杠(/)
  11. NOIP原题 斗地主(20190804)
  12. html怎么设置拉伸图片大小,html – 如何在不拉伸的情况下调整图像大小?
  13. java pdf 套打_itext生成发票套打(操作PDF)
  14. Android 网速实时监听
  15. NPN求解三极管电路或电容恒流放电详解,三极管工作在放大区,基极控制集电极电流,针对电荷泵电容恒流放电控制,因为电荷泵输出恒定电流给快充手机锂电池充电
  16. 2022安全员-C证试题模拟考试平台操作
  17. 木头机器人变魔方_【转】一个木头魔方的制作过程
  18. Informatica 中文字符
  19. 单片机驱动—IIC驱动
  20. 土建翻模怎么自动【生成构造柱】呢?

热门文章

  1. python可以封装成独立程序吗_windows环境下把Python代码打包成独立执行的exe
  2. sqlserverv中处理字符串包含、截取
  3. 不止面部识别,一切关于人脸AI的资源都能在这里下载
  4. 托微软的福,谷歌把GitLab捧成了独角兽
  5. “哇靠”,小米最AI手机MIX 2S发布了
  6. 无需在数据集上学习和预训练,这种图像修复新方法效果惊人 | 论文
  7. 摩拜前端周刊第10期
  8. 初步学习Django-第五篇:ORM详解
  9. Django_RBAC_demo2 升级版权限控制组件
  10. DB2建立不记录日志的表