您的位置:首页 > 编程语言 > ASP

Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之NHibernate的Session管理与初始化(附源码)

2009-12-25 09:55 886 查看
  NHibernate的Session和Asp.Net的Session是两码事,大家不要混淆了。NHibernate的Session是拿来干啥的?对用用过Linq2Sql的同学,可以把它理解成DataContext。要被持久化的对象都要放在Session里托管。Session同时也是一个缓存,比如在一定范围内你通过NHibernate ,Get了一个User ,当你再次Get同样的这个User的时候NHibernate就不会去操作数据库,而会直接从Session缓存中取出第一次获得的User。

为了充分利用NHibernate的延迟加载和它缓存机制,我们应该把Session的生命周期合理控制,比如在WCF应用中我们应该把Session绑定在一次通讯请求里,在Asp.netMVC中我们最好把Session的生命周期绑定在一次Action里。由于我们的系统设计将来会用到WCF或其他请求形式,所以我们做一个接口:

using System;
using NHibernate;

namespace Demo.HIS.FrameWork.Repository.NHb
{
public interface ISessionStorage
{
ISession Get();
void Set(ISession value);
}
}


注意添加引用NHibernate.dll,目前使用的版本是NHibernate-2.1.0

因为目前主要我们还是用Asp.net MVC 所以新建一个类HttpSessionStorage实现接口ISessionStorage:

代码

namespace Demo.HIS.MVC
{
public class DemoHISApplication : HttpApplication
{
protected virtual void OnStart()
{
initSessionBuilder();
}

private void initSessionBuilder()
{
SessionBuilder.sessionStorage = new HttpSessionStorage();//这里创建Session实例
}

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
"Default",                                              // Route name
"{controller}/{action}/{id}",                           // URL with parameters
new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

}
protected void Application_Start()
{
OnStart();
}
}
}


注意我这里更改了下Global.asax的引用:

<%@ Application Inherits="Demo.HIS.MVC.DemoHISApplication" Language="C#" %>


源码下载:HISDemo-2.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐