【IT168技术文档】
在hibernate中Session 是“单线程”的,即多个线程访问一个Session 会出问题。所以在最普遍的做法是一个操作就创建一个新的Session。Session对应着一个数据库的连接,而且Session内部提供了缓存(一级缓存)的机制。这样做意味这更多的数据库连接次数和缓存资源的浪费。
hibernate中使用使用ThreadLocal的目的就是让Session在一个线程内共享,尽可能的较少连接数据库的次数和尽可能的使用到一级缓存。
对于NHibernate是否有实现的办法呢。我们找到了ThreadStaticAttribute ,它指示静态字段的值对于每个线程都是唯一的。用法如下
储存ISession类需要实现的接口。[ThreadStatic] static int value;
using NHibernate; namespace Index.Data.NHibernateSessionStorage { /**//// <summary> ///储存一个ISession /// </summary> public interface ISessionStorage { /**//// <summary> ///获得ISession /// </summary> /// <returns></returns> ISession Get(); /**//// <summary> /// 保存ISession /// </summary> /// <param name="value"></param> void Set(ISession value); } }