`
hugh-lin
  • 浏览: 72931 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

[转]Web项目下NHibernate的Session管理的解决方案

阅读更多

<!---->
NHibernate的Session的管理一直是个问题,在系统开发中

如果有lazy="true",如果不对Session进行管理,会抛出以下错误:
CODE:

Failed to lazily initialize a collection - no session


在Web项目下的解决方案,就是在Application_BeginRequest方法中打开Session并放入HttpContext,在Application_EndRequest方法中关闭Sesssion就可以了。

还好,NHibernate1.2已经提供了相关的支持,如下:

在web.config中加入以下代码
CODE:

<httpModules>
        <add name="CurrentSessionModule" type="NHibernate.Example.Web.CurrentSessionModule" />
    </httpModules>



程序如下:

CODE:

using System;
using System.Web;
using NHibernate.Context;

namespace NHibernate.Example.Web
{
  public class CurrentSessionModule : IHttpModule
  {
    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(Application_BeginRequest);
        context.EndRequest += new EventHandler(Application_EndRequest);
    }

    public void Dispose()
    {
    }

    private void Application_BeginRequest(object sender, EventArgs e)
    {
        ManagedWebSessionContext.Bind(HttpContext.Current, ExampleApplication.SessionFactory.OpenSession());
    }

    private void Application_EndRequest(object sender, EventArgs e)
    {
        ISession session = ManagedWebSessionContext.Unbind(HttpContext.Current, ExampleApplication.SessionFactory);
  if(session !=null)
  {
        if (session.Transaction.IsActive)
        {
          session.Transaction.Rollback();
        }

        if (session != null)
        {
          session.Close();
        }
    }
    }
  }
}
分享到:
评论

相关推荐

    Summer of Nhibernate Session 13 Code.zip

    打开这个解决方案,我们可以看到整个项目结构和依赖关系,了解如何在Nhibernate的帮助下组织大型项目。 接着,"DataAccessLayerTest"文件夹很可能包含了数据访问层的测试代码。在Nhibernate中,数据访问层是连接...

    Summer of Nhibernate Session 14 Code.zip

    1. **DineAndDiscussNHibernate.sln**:这是整个项目的核心解决方案文件。在Visual Studio中打开此文件,我们可以看到项目的整体结构和依赖关系。它通常包含多个子项目,如业务逻辑层、数据访问层、用户界面等,这些...

    Summer of Nhibernate Session 12 Code.zip

    这个解决方案可能包含了一个完整的Web应用程序或桌面应用程序,涵盖了从数据访问层到业务逻辑层的全部架构。 "DataAccessLayerTest"文件夹很显然是数据访问层的测试代码,这是进行单元测试和集成测试的重要部分。...

    NHibernate三层简单用户管理系统

    - **NHibernateWebDemo.sln**:这是Visual Studio解决方案文件,包含了整个项目的配置和引用。 - **51aspx源码必读.txt**:可能是一个关于源码阅读的指南或提示文件。 - **最新Asp.Net源码下载.url**:指向一个...

    NHibernate的小例子

    在“WebSite5”这个项目中,很可能是创建了一个基于 ASP.NET 的 Web 应用程序,展示如何在 Web 环境下集成 NHibernate。这通常包括设置 NHibernate 配置,如数据库连接字符串、实体映射文件(XML 或注解形式),以及...

    学习实例 NHibernate 增删查改

    2. **NHibernateWebDemo.sln**:这是一个Visual Studio解决方案文件,其中包含了整个Web应用程序的项目结构,用于演示NHibernate在Web环境中的应用。你可以打开这个文件,通过查看各个项目和代码文件来学习实际的...

    asp.net nhibernate

    NHibernate 是Java平台上的Hibernate的.NET版本,它为.NET开发者提供了一个强大的持久层解决方案。通过ORM,NHibernate可以自动将.NET对象转换为数据库表记录,反之亦然。这样,开发者可以使用面向对象的编程方式...

    ASP.NET NHibernate框架实例

    在该实例中,`WEB (2).sln`文件是一个Visual Studio解决方案文件,它包含了整个项目的配置和依赖关系。打开这个文件,我们可以看到项目的结构和各个组件。`WEB`可能是一个包含ASP.NET Web应用程序的项目,其中包含了...

    Asp+Nhibernate登录

    NHibernate提供了一种对象关系映射(ORM)解决方案,使得开发人员可以使用面向对象的编程模型来操作数据库。在用户登录的过程中,我们需要查询数据库以验证用户名和密码,这通常涉及到数据库的CRUD(创建、读取、...

    MVC+NHibernate+Spring.net

    此外,Spring.NET还包含了Web、数据访问、事务管理等多个模块,为.NET应用提供了一站式的解决方案。 【MVC与NHibernate和Spring.NET的结合】 在MVC应用中集成NHibernate和Spring.NET,可以创建一个高效且灵活的系统...

    Asp.net Nhibernate+sql程序例子

    - **NH.sln**:这是Visual Studio的解决方案文件,包含了项目的整体配置和所有相关的项目文件引用。 - **NH.suo**:这是Visual Studio的用户选项文件,存储了用户的个人设置和调试信息。 - **Nhibernate使用说明.txt...

    nhibernate教程

    ### NHibernate教程知识...综上所述,NHibernate不仅提供了一种高效的ORM解决方案,还大大简化了.NET应用程序与数据库交互的过程。通过掌握上述关键知识点,开发者可以更高效地利用NHibernate来构建高质量的应用程序。

    Nhibernate配置demo

    10. **NhibernateFramwork.sln**:这是一个Visual Studio解决方案文件,包含了整个项目的所有相关组件,如项目、引用、配置等。通过打开这个文件,我们可以看到项目的结构和组成。 通过深入研究这个Nhibernate配置...

    ext asp.net mvc nhibernate 完整项目示例

    【标签】:“ext asp.net mvc nhibernate 完整项目示例”标签明确了项目的核心技术栈,EXT.NET提供了丰富的UI控件,ASP.NET MVC提供了灵活的架构设计,而NHibernate则是强大的数据持久化解决方案。 【文件名称列表...

    nhibernate实例(源码)

    NHibernate 是 .NET 上最流行和成熟的 ORM 解决方案之一,它支持多种数据库系统,如 SQL Server、MySQL、Oracle 等。 2. **NHibernate 的主要组件**: - **Configuration**:配置 NHibernate,包括数据库连接信息...

    ASP.NET的一个NHibernate练习

    `NHDemo.sln`是Visual Studio解决方案文件,它包含了项目及其依赖项的集合。在这个案例中,`NHDemo.sln`管理着整个NHibernate练习的各个部分,包括ASP.NET web应用和可能的类库项目。 `Bin`目录存放编译后的程序集...

    ASP.NET MVC Spring.Net NHibernate整合源码.

    NHibernate 是 .NET 上的一个流行的 ORM 解决方案,它允许开发者使用面向对象的方式操作数据库,避免了直接编写 SQL 查询。NHibernate 提供了对象持久化、查询语言(HQL)以及事务管理等功能,极大地简化了数据访问...

    spring.net+nhibernate

    FastSpring则是一个知名的电子商务解决方案,主要处理软件销售和订阅管理。在这里,我们将深入探讨这三个组件如何协同工作,并提供一个整合的例子。 **Spring.NET** Spring.NET是.NET平台上的一个轻量级框架,它...

    ASP.NET with Nhibernate

    ASP.NET with NHibernate 是一个深度探讨如何在ASP.NET MVC框架中使用NHibernate作为持久层解决方案的教程。ASP.NET MVC是一个灵活、模式驱动的框架,用于构建可维护、高性能的Web应用程序。而NHibernate则是一个...

Global site tag (gtag.js) - Google Analytics