知识大全 Asp.Net中NHiernate的Session的管理

Posted

篇首语:你若要喜爱你自己的价值,你就得给世界创造价值。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Asp.Net中NHiernate的Session的管理相关的知识,希望对你有一定的参考价值。

Asp.Net中NHiernate的Session的管理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

     NHibernate中的Session 在我的理解似乎就相当于数据库中连接 因为它也有Open/Close的方法 我没有研究NHibernate的源码 不知道这种理解是否有误?我在网上搜了很多的关于Session的管理 大多都是在我需要数据库操作的时候 就OpenSession() 操作完后就CloseSession() 这有点拟似如我们刚开始学习ADO NET的时候 要Connection对象Open() 数据处理完后就Close() 但是这里就带来了一个弊端 因为Connection的频繁的开关是非常消耗系统资源的 我记得以前在制作一个数据的录入界面的时 因为这个录入的界面数据元素比较多 而且很多DropDownList需要在数据库中读取数据并绑定   这样在该页面的Page_Load中需要调用相应对象的方法一一从数据库中检索数据绑定DropDownList 因为我们这些对象的方法都是使用独立的Connection 都有自己的Connection的Open和Close 所以 导致这个页面一打开就需要等待好长的时间 比较慢 后来我们将这些需要绑定DropDownList的数据通过一个数据处理成一个DataSet 并将DataSet中的DataTable与DropDownList绑定 这样只需要一次的Connection的Open/Close 页面快了好多      所以 我觉得上述的Session的管理办法不是很妥当      后来 我看了Cuyahoga开源项目中他的Session管理 他使用的 session per request 这种模式   从字面上理解就是他为每个Request创建一个Session 直到这个请求销毁 那么这个Session也就Close了   而Cuyahoga他的做法和session per request有点不同地方就是 他为每个Request都创建了一个CoreRepository对象 CoreRepository是系统所需要的数据处理服务的类   他的做法是先创建了HttpModule(NHSessionModule)用来创建CoreRepository对象和销毁CoreRepository对象 如下   private void Context_BeginRequest(object sender EventArgs e)       // Create the repository for Core objects and add it to the current HttpContext    CoreRepository cr = new CoreRepository(true);    HttpContext Current Items Add( CoreRepository cr);          private void Context_EndRequest(object sender EventArgs e)       // Close the NHibernate session    if (HttpContext Current Items[ CoreRepository ] != null)       CoreRepository cr = (CoreRepository)HttpContext Current Items[ CoreRepository ];    cr CloseSession();            这样在每次请求的时候 会自动创建CoreRepository对象 当请求完毕后 就CloseSession() 在程序中通过HttpContext Current Items[ CoreRepository ]就能获取CoreRepository对象了      这样也就变相的管理了NHibernate中的Session 也就达到了 session per request 的这种模式      详细的讲解 通过实现IHttpModule初始化Nhibernate的Session      这种方式比上面的那个每次操作都需要创建Session 性能和速度应该提高了不少   接着我就想 每个请求都创建Session 是不是我们可以象创建Connection Pool一样 也创建一个Session Pool   这样就每次请求的时候不是直接创建Session 而是在我们的Session Pool中拿已经创建好的Session 这样效率不是更好?! cha138/Article/program/net/201311/12369

相关参考

知识大全 ASP.NET中GUID

ASP.NET中GUID  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  GUID(Globalu

知识大全 在ASP.NET中动态生成图形

在ASP.NET中动态生成图形  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  NET有一个很灵巧

知识大全 ASP.NET中App

ASP.NET中App  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Bin文件夹  Bin文件夹包

知识大全 ASP.NET中DataTable对象

ASP.NET中DataTable对象  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  DataT

知识大全 ASP.NET中在线用户统计

ASP.NET中在线用户统计  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  统计在线用户的作用不

知识大全 ASP.NET中编程杀死进程

小技巧:ASP.NET中编程杀死进程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  通过ASPN

知识大全 Asp.Net中使用水晶报表

Asp.Net中使用水晶报表  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  以下内容为程序代码:

知识大全 ASP.NET中异常处理使用

ASP.NET中异常处理使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  通用语言运行时(CL

知识大全 浅析ASP.NET编程中十大技巧

浅析ASP.NET编程中十大技巧  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在本篇文件中我们

知识大全 ASP.NET中如何使用匿名函数

ASP.NET中如何使用匿名函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  尝试从缓存中获取