每个线程的NHibernate Session与ThreadLocal

时间:2012-04-25 19:00:01

标签: c# multithreading nhibernate synchronization thread-local

在ThreadLocal中存储NHibernate会话是否有意义,是否可以安全地假设线程安全并解决会话的延迟加载问题?假设只要线程正在执行Session就可以安全吗?就线程而言,我在谈论HttpRequet。

此外,我是否会用完NHibernate的会话?会话的最大数量是多少?如果我有很多线程,那会没关系吗?

1 个答案:

答案 0 :(得分:2)

NHibernate会话不是线程安全的。 只要您将一个会话与一个应该正常工作的会话相关联。

如果您要使用http请求,请使用每个请求实现的会话的最佳方法,其中会话在请求启动时打开,在请求结束时关闭。在这种情况下,可以安全地假设只要线程正在执行,会话就可用。

通常NHibernate不会耗尽会话,但更好的做法是使用寿命最短的会话。