最近一个项目要用到.Net,用久了Hibernate直接用ADO.NET手写SQL的话真还有点不适应,还好NHibernate提供了对.Net的ORM支持。在使用Hibernate的时候

,可以使用ThreadLoca来存放Session的。ThreadLoca是给每个线程提供单独的静态变量,在一个线程内部共享,而不同的线程间不共享。在.Net中找了好长时间

,终于找到了ThreadStaticAttribute ,它指示静态字段的值对于每个线程都是唯一的。在WinFrom,控制台应用程序和类库等中的确是可以用的。但在Asp.Net中

HttpRequest则可能有多个线程为其服务。如果用ThreadStaticAttribute 的话,很有可能同一个请求使用多个线程那么数据就不能共享了。不过我们可以使用

HttpContext.Current.Items来存放session。所以就自己写一个等同ThreadLocal的类来存放Session,代码如下:

 

    自己又写了一个SessionFactoryUtil类,用来打开和关闭Session,代码如下:
   

在.Net中存放NHibernate的Session值public abstract class SessionFactoryUtil

相关文章: