通过实现IHttpModule初始化Nhibernate的Session
Nhibernate的Session如果每次都打开,关闭一次会很麻烦,如果忘记关闭Session,很容易就达到连接池的最大值,我们可以把他移动到实现IHttpModule的类中
在请求开始时初始化CoreRepository,并且放入每次请求缓存(HttpContent.Item)中
参考Cuyahoga的实现
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
<add type="VirtualBank.Web.HttpModules.NHSessionModule, VirtualBank" name="NHSessionModule" />
</httpModules>
调用方法:
通常可以放到构造函数中
_coreRepository = HttpContext.Current.Items["CoreRepository"] as CoreRepository;
可以参考:
操作Nhibernate
通过实现IHttpModule初始化Nhibernate的Session相关推荐
- Nhibernate中session的状态与session.connection.state状态的差别的解释
在项目中用到了nhibernate,但是需要判断数据连接的状态,在NHIbernate的文档中找了半天,英文的中文的都看了一遍,都没找到相关的说明 .后来在Hibernate的论坛上才找到了一些说明. ...
- php 7 class 初始化 销毁_在 PHP 中使用和管理 Session
1.Session vs. Cookie 与 Cookie 一样,Session 技术也是用于解决 HTTP 协议无状态的问题,不过,与 Cookie 数据保存在客户端不同,Session 数据存储在 ...
- php 类初始化 session判断,thinkphp3.x中session方法的用法分析
本文实例讲述了thinkphp3.x中session方法的用法.分享给大家供大家参考,具体如下: 一.Session方法用于Session 设置.获取.删除和管理操作. Session 用于Sessi ...
- spring.net nhibernate 分布布式事务(下)
spring.net nhibernate 分布布式事务(下) 摘自: http://www.cnblogs.com/GoodHelper/archive/2010/07/30/SpringNetDi ...
- NHibernate中的API
本篇文章介绍的是NHibernate的各种API及其作用. 下图描述了NHibernate的API在分层架构中的作用,下面将进行详细说明. NHibernate的接口大致分为四类: 1. 被应用程序 ...
- NHibernate初学者指南(15):使用LINQ to NHibernate提供程序查询数据
在前面的<NHibernate初学者指南(8):增删查改>一文中简单的提到了查询一个实体的Get<T>和Load<T>方法以及查询实体列表的Query<T&g ...
- Welcome to NHibernate
Welcome to NHibernate Wiki extracted from the original blog post of Gabriel Schenker 假如你正在阅读这篇文章,我们假 ...
- NHibernate学习手记(3) - NH的配置信息
作为一种通用的持久层框架,NH可以通过配置来指定所使用的数据库类型,并且可根据不同的数据库调整NH的运行参数.这些配置信息通常保存在配置文件中,当数据库配置发生改变时,我们只需要修改配置文件即可,不需 ...
- 【转】NHibernate入门教程
开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo 摘要: 热衷于开源框架探索的我发现A ...
最新文章
- asp vb 插入,更新,删除数据库操作。
- -32767转化为二进制_程序员需要了解的硬核知识之二进制
- os模块中的shutil的使用方式与方法
- python打包的exe开机自动启动(windows)
- NodeJS作为Web架构中间层的使用
- 教你玩转CSS 图像透明/不透明
- 怎么在activity里面操作listView的item里的组件的点击事件
- 使用Crash工具查看一个TCP listen sock内存布局实例
- 汇编语言 emu8086软件的安装和输出Hello,world
- 使用replaceAll()方法替换字符串中的反斜杠:左斜杠(\)和右斜杠(/)
- NOIP原题 斗地主(20190804)
- html怎么设置拉伸图片大小,html – 如何在不拉伸的情况下调整图像大小?
- java pdf 套打_itext生成发票套打(操作PDF)
- Android 网速实时监听
- NPN求解三极管电路或电容恒流放电详解,三极管工作在放大区,基极控制集电极电流,针对电荷泵电容恒流放电控制,因为电荷泵输出恒定电流给快充手机锂电池充电
- 2022安全员-C证试题模拟考试平台操作
- 木头机器人变魔方_【转】一个木头魔方的制作过程
- Informatica 中文字符
- 单片机驱动—IIC驱动
- 土建翻模怎么自动【生成构造柱】呢?