• NHibernate 如何对session管理,实现lazy=true 拂晓风起


    Nhibernate session管理。以前用过Hibernate,由于当时我不是主要负责持久层,所以对Hibernate不是很熟悉,但记得当时session管理没有什么问题。但是NHibernate就出现了一个问题。如果每次进行持久化操作都open一次session然后close一次session,那么将不能使用lazy这个机制。运行时会报错“session已关闭”之类的提示。
    怎么解决呢?我查了一些文章得到以下结论。
    两个方法:
    1.自己写一个sessionFactoryHelper,里边建一个getCurrentSession方法,第一次就建一个session丢到HttpContext里边,基本不用关闭,等服务器自己销毁
    http://www.developer.com/open/article.php/10930_3709346_4

    2.在<httpModules>里边加入一个类,分别加入一个BeginRequest的Handler和EndRequest的Handler。使用的是Nhibernate对session绑定到request里边的机制。
    http://hugh-lin.javaeye.com/blog/167730

    本人在实践过程中,尝试了第二种方法。但使用Nhibernate的绑定时,出错,由于对NHibernate不熟悉,所以就完全不知道怎么解决。最后只能考虑结合第一个方法来创新一下。
    最后解决过程如下:

    1.建立一个NHibernateHelper这样的一个类,用于创建SessionFactory和创建session等工作。代码如下。其中实现IHttpModule接口是为了加入到Web初始化节点中,使得每次有request的时候,都会执行Application_BeginRequest和Application_EndRequest两个函数。一个是在request来的时候,打开session,放到上下文中,然后responce之前把session关闭。

    Code

     2.要在Web.config中加入节点,使得web初始化的时候,初始化上边这个helper

    <httpModules>
            
    <add name="NHibernateHelper" type="AssemblyName.NHibernateHelper" />
    </httpModules>

    3.使用的时候只需要调用helper,每次都getCurrentSession得到session。OK,完成……

    kenkofox@qq.com https://github.com/kenkozheng 欢迎投简历给我,一线大厂工作机会
  • 相关阅读:
    移动端a标签点击图片有阴影处理
    sublime vue 语法高亮插件安装
    mongodb 命令
    MongoDB给数据库创建用户
    windows32位系统 安装MongoDB
    ES6之主要知识点(十)Proxy
    ES6之主要知识点(九)Set和Map
    ES6之主要知识点(八)Symbol
    ES6之主要知识点(七)对象
    Ueditor 1.4.3 插入表格后无边框无颜色,不能正常显示
  • 原文地址:https://www.cnblogs.com/kenkofox/p/1541669.html
Copyright © 2020-2023  润新知