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或其他请求形式,所以我们做一个接口:
注意添加引用NHibernate.dll,目前使用的版本是NHibernate-2.1.0
因为目前主要我们还是用Asp.net MVC 所以新建一个类HttpSessionStorage实现接口ISessionStorage:
代码
注意我这里更改了下Global.asax的引用:
源码下载:HISDemo-2.rar
为了充分利用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
相关文章推荐
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之NHibernate的Session管理与初始化(附源码)
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之实现基本的数据库访问(附源码)
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之分页与排序(附源码)
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之分页与排序(附源码)
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之多条件组合查询(附源码)
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之多条件组合查询(附源码)
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之多表关联查询(附源码)
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之多表关联查询(附源码)
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之实现基本的数据库访问(附源码)
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象
- Asp.Net大型项目实践(3)-业务领域对象建模
- Asp.Net大型项目实践(5)-独家资料!整合NHibernate与Json序列化(附源码)
- [转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)
- Asp.Net大型项目实践(10)-基于MVC Action粒度的权限管理(在线demo,全部源码)
- Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)
- Asp.Net大型项目实践(5)-独家资料!整合NHibernate与Json序列化(附源码)
- Asp.Net大型项目实践(5)-用Unity实现层与层之间的接口调用(附源码)
- Asp.Net大型项目实践(8)-从最简单开始一个ExtJs做的登录页(附源码,在线demo)
- NHibernate3.2+Asp.net MVC3+Extjs 4.0.2项目实践(三):Services中间业务层