在ASP.NET中使用NHibernate

在.net中使用NHibernate框架的详细教程(带图教程) 本文档是我在使用NHibernate框架的一些感悟,里面是我精心炮制的带图详细教程,一步一步教导初学者使用NHibernate框架,适合初学者,大家可以交流一下心得。 立即下载

在ASP.NET中使用NHibernate

关键还是会话工厂的建立和NHibernate的Session的管理问题。
会话工厂仍然是使用singleton模式建立。而session管理则和Wndows Form不同:Wndows Form可以保持长连接,以获得比较好的用户体验,因而可以使用ThreadStaticAttribute或者TLS来保存session;在Web Form中使用ThreadStaticAttribute则不会如期望的那样工作,当有多个线程的时候,ThreadStaticAttribute的变量被第一个线程初始化后,其它的线程访问到的都是null,而每个HttpRequest则可能有多个线程为其服务,因而有人称ThreadStatic is evil,对于此,可以参考这个Blog。考虑到上述原因,在Web Form中使用TLS和ThreadStatic属性是不合适的,好的做法是使用HttpContext.Current.Items来共享session。我们使用HttpModule来处理之,下面是一个例子:

using  System;
using  System.Web;
using  DAL;
using  NHibernate;

namespace  NHTest
{
    
/// <summary>
    
/// NHSessionModule 的摘要说明。
    
/// </summary>

    public class NHSessionModule : IHttpModule
    
{
        
/// <summary>
        
/// Default constructor.
        
/// </summary>

        public NHSessionModule()
        
{}

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


        
public void Dispose()
        
{
        }


        
private void Context_BeginRequest(object sender, EventArgs e)
        
{
            manager 
= EntityManager.CreateEntityManager();
            ISession session 
= manager.Session as ISession;
            HttpContext.Current.Items.Add(
"NHSession", session);
            HttpContext.Current.Items.Add(
"Manager",manager);
        }


        
private void Context_EndRequest(object sender, EventArgs e)
        
{
            
// Close the NHibernate session.
            if ( HttpContext.Current.Items["NHSession"] != null )
            
{
                ISession session 
= HttpContext.Current.Items["NHSession"] as ISession;
                
if ( session != null && session.IsOpen )
                
{
                    session.Close();
                }

            }

        }

    }

}

 

XML配置文件:

   < system .web >
    
< httpModules >
      
< add  type ="NHTest.NHSessionModule,NHTest"  name ="NHSessionModule"   />
    
</ httpModules >
   
</ system.web >


上面代码中的IEntityManager 是用来执行持久化以及查询的工具类(调用NHibernate中ISession提供的方法),然后在页面中先写一个页面基类来进行Session的获取:

using  System;
using  System.Web;
using  System.Web.UI;
using  DAL;
using  NHibernate;

namespace  NHTest
{
    
/// <summary>
    
/// BasePage 的摘要说明。
    
/// </summary>

    public class BasePage : Page
    
{
        
private ISession _activeSession = null;
        
private IEntityManager _manager = null;

        
public BasePage()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }


        
public ISession ActiveSession
        
{
            
get { return this._activeSession; }
        }


        
public IEntityManager Manager
        
{
            
get { return this._manager; }
        }


        
protected override void OnInit(EventArgs e)
        
{
            
this._activeSession = HttpContext.Current.Items["NHSession"] as ISession;
            
this._manager = HttpContext.Current.Items["Manager"] as IEntityManager;
            
base.OnInit(e);
        }


    }

}


 在页面中可以这么用:

private  IEntityManager manager  =   null ;
private  ISession session  =   null ;
private   void  Button1_Click( object  sender, EventArgs e)
{
   session 
= base.ActiveSession;
   manager 
= base.Manager;
   IList list 
= manager.GetList(session, typeof ( MyBusinessType));
   DataGrid1.DataSource 
= list;
   DataGrid1.DataBind();
}


另外请参考NHibernate的官方说明,还可以看Tobin的论述。

 
Asp.net Nhibernate+sql程序例子 本例采用vs2008 对初学真很有帮助 本例包括增、删、改. 立即下载

相关推荐

asp.net nhibernate

nhibernate配置nhibernate配置nhibernate配置nhibernate配置

ASP.NET MVC中使用Nhibernate(一)

一,摘要 在本篇文章中我们覆盖如何安装配置Nhibernate,以及在MVC中如何使用它. 二,什么是Nhibernate Nhibernate是一个应用于.NET中的对象-关系映射器,它将对象模型映射到关系型数据库,在本文中你将看到Nhibernate处理大部分持久层相关联的任务,从http://sourceforge.net/projects/nhibernate/files/站点下载N...

数据库天地 210

VCS和UVM常用编译选项

VCS编译选项 -full64 在64bit模式下编译、仿真,用于64位操作系统 -j8 指定编译器可以并行编译的进程数为8 -timescale=1ns/1ps 指定仿真时间和精度 +libext+.v+.V+.sv+.svh 识别.v、.sv、.svh等多种格式文件 -sverilog 支持system verilog 编译 -f xxx.lisf 指定包含所有设计文件列表的文件名 -top test 设置顶层模块为test。(指包含.

qq_40571921的博客 9932

ASP. NET MVC4 NHibernate篇

本篇主要介绍一下asp.net项目开发的基础知识。要想独立开发一款基于NHibernate的项目,你需要掌握以下知识:C#语言及其编写、搭建项目架构、引用Spring和NHibernate文件、掌握NHibernate的三种数据库语句编写、配置NHibernate和Spring文件,以及Html、Css和Script( 可掌握easyUI、JQuery、angularJS和bootStrap )语言。

ColorWaterer的专栏 2309

【Linux内核】Linux内核裁剪完全指南:从理论到实战的系统优化

在嵌入式设备、专用服务器和物联网系统日益普及的今天,如何让Linux系统在资源受限的环境中高效运行成为开发者必须面对的问题。Linux内核裁剪正是解决这一问题的关键技术,它通过移除不必要的内核组件,打造出更精简、更安全、更高效的自定义操作系统。本文将系统全面地介绍Linux内核裁剪的完整流程和实用技巧,帮助您掌握这一核心技能。Linux内核裁剪是一项结合技术知识与实践经验的系统工程。明确需求:裁剪前必须清晰了解目标系统的硬件配置和功能需求。循序渐进:采取小步修改、反复测试的策略,避免一次性大幅修改。

撬动未来的支点的专栏 1387

UR5双臂Gazebo仿真(Python)

近来在Gazebo上搭了一个ur5双臂仿真平台。 差不多就是以下这样。 使用rostopic list查看一下话题,如下 显然,采用/left_arm_controller/follow_joint_trajectory/goal和/right_arm_controller/follow_joint_trajectory/goal两个话题来控制双臂的运动。 现在的问题是,如何保证双臂运动的一致性,即如何能保证双臂能同时接受到以上两个消息。 思路一:设置/left_arm_controlle

qq_42823342的博客 2233

。net中使用NHibernate

用java开发项目的时候,一直用着SSH,本人的感觉还是挺不错的。可是还从来还没有的。NET项目中使用NHibernate,一直听朋友说和Hibernate差不多。查了相关的资料,其实都离不开四点的中心思想。1建立实类using System;using System.Collections.Generic;using System.Linq;using System.Text;

qinguanhua的专栏 669

数字IC设计实现之hierarchical flow系列(一)

数字IC设计实现之hierarchical flow系列(一) 最近这段时间小编又比较忙起来了,今天抽空来咖啡厅码字来了,刚到时脑子一片空白,不知道要分享些什么(项目结束后将会在知识星球上分享数字 IC 设计实现 Tapeout 前要review的那些 checklist)。突然间想起来有个星友希望小编分享些数字 IC 设计实现 hierarchical flow 的相关内容。考虑到现在大都采用这种方式来做 design 和实现,那就选这个 topic 了。限于篇幅和时间限制,今天只分享逻辑综合部分和布局布

weixin_37584728的博客 5998

ASP.NET MVC中使用Nhibernate(二)

一,摘要 这是ASP.NET MVC中使用Nhibernate的第二部分,你也可以查看第一部分 一,多对多关联 我们将继续创建我们的Post类的映射文件,相对于Category将增加一点难度,应为我们不得不去呈现一个多对对的关系,为了达到这个目的,我们在映射文件中使用Bagyu元素,下面是Post.hbm.xml 文件的代码: 1: 2: 5: 6:

Steven's Blog 1997

3步!Spring Boot+OCR引擎秒提身份证/营业执照?手把手教你从零实现!

OCR技术革新文档识别效率 本文演示了如何利用Spring Boot+Tesseract OCR+OpenCV构建自动化文档识别系统。相比传统人工录入,OCR技术可实现: 5秒极速提取身份证/营业执照关键信息 精准识别中文文本(准确率90%+) 正则过滤自动匹配结构化数据 技术要点: OpenCV图像预处理(灰度化+二值化) Tesseract多语言OCR识别 正则表达式精准提取证件号码 效率提升达100倍,错误率降低90%,适用于金融、政务等需要批量处理证件的场景。

java专栏 903

【DaVinci Developer工具实战】03 -导入xml文件

本文档描述了 DaVinci Developer 导入数据的的具体功能 ,它适用于导入AUTOSAR SWC 模板【AUTOSAR XML 文件】 文件。

1991

ASP.NET MVC中使用Nhibernate(三)

一,摘要 本篇文章是ASP.NET MVC中使用Nhibernate的第三篇也是最后一篇文章 ASP.NET MVC中使用Nhibernate(一) ASP.NET MVC中使用Nhibernate(二) 二,内容 大致结构如下:   三,完整源码下载 由于优快云上传的源码要经过审核,所以我稍后会以评论的形式提供完整版源码地址,谢谢您的访问!

Steven's Blog 1540

车载网络测试实操源码_使用CAPL脚本进行UDS刷写及其自动化测试

本文主要讲解如何使用CAPL脚本进行UDS刷写及其自动化测试,并结合了几个测试实例进行介绍,希望对大家有所帮助。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 1551

整合ASP.NET MVC5,Spring.Net,NHibernate

所有的程序集引用,都可以在Nuget中获取,需要注意除了Spring和NHibenate的程序集外,还要引用Spring.Net NHibernate Support。         为了结构清晰,我把各层的配置都放在了Config文件夹下,NH的映射文件存放于Model层中的Mappings文件夹下,如图,额,由于课程题目,这是一个简单的二手车交易系统 。 首先是Car.W

年轻人,潜力无限! 5412

ofd转pdf报错:org.ofdrw.reader.ZipUtil.unZipFileByApacheCommonCompress【已解决】

ofd转pdf报错:java.lang.NoClassDefFoundError:org/apache/commons/io/function/IOIterator at org.ofdrw.reader.ZipUtil.unZipFileByApacheCommonCompress,java.lang.NoSuchMethodError:org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextEntry()

黄团团的个人博客 1283

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Nhibernate快速开始,IIS ASP.NET MVC项目,MSSQL

刚接触Nhibernate,(Nhibernate是什么,哈哈,百度,以下简称NH)走了不少弯路,写下过程,参考内容 官网 Chapter 1. Quick-start with IIS and Microsoft SQL Server,不过它是英文的,看起来有点难,而且它操作步骤写得不细,概念涉及较多。既然是用框架,简单一二三就好。 步骤: 1 新建asp.mvc 项目QuickStart,注意框架选4.6.1以上,因为新版的NH要4.6.1以上 2 引入NHibernate,这个有很多方法,我喜欢用Nu

weixin_44933129的博客 295

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

关于ASP.NET MVC和NHibernate,LinQ,ASP.NET AJAX,ASP.NET Custom Server Control

关于ASP.NET MVC和NHibernate=====================================Hibernate在Java的应用已经很多年了,而NHibernate是Hibernate在.NET的接口?不过好像这个概念还是脱离不开从Object映射到数据库table的。而MVC其实包含了从用户界面到控制器到Entity Class直到数据库的整套框架。说到“采用那种方式

tmeteor的专栏 928

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ASP.NET MVC Spring.NET NHibernate 整合

请注明转载地址:http://www.cnblogs.com/arhat 在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做。同理这个三个技术也是。那么在整合之前,需要对 ASP.NET,Spring.NET,NHibernate有所了解,最好是有一些经验,因为平白无故的就把3个技术融合到一起,会闹些小别扭,其实就像配置化学药品一样,如果3中原料有一点出路,那么...

weixin_33991727的博客 231

NHibernate Best Practices with ASP.NET, 1.2nd Ed. from CodeProject.com

Authors note added June 11, 2008 - Announcement of S#arp ArchitectureThankfully, technologies evolve over the years. Accordingly,Microsoft has introduced ASP.NET MVC as an alternative to classic

kissjob的专栏 2215

ASP.NET MVC+NHibernate (CURD)

今天的这篇博文是关于在ASP.NET MVC 中使用Nhibernate并且对其session进行管理。当你阅读这篇博文时,默认你已经熟悉Nhibernate和ASP.NET MVC。其实在.net中有一款ORM框架:Entity Framework。我个人觉得在企业级项目中使用EF框架并不如使用NHibernate好,况且hibernate在jsp中已经是运用的十分的好了,Nhibernate只...

weixin_30716725的博客 165

关于如何在ASP.NET2.0网站与Visual Web Developer Express中配置NHibernate的问题

在ASP.NET项目中使用NHibernate老是会碰到无法加载配置文件的问题,刚才瞎折腾了1小时,才从外国的一篇博客里找到了解决方案.地址如下:http://derek-says.blogspot.com/2008/02/nhibernate-in-visual-web-developer.html. 现在我来简单的讲解下如何配置. 1.数据库里建表,如tb_Departme...

aclj22431的博客 129
上一篇: web前端结构与行为的分离
下一篇: 面向对象的Jscript
SmartJavaer
博客等级 码龄21年 13粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值