我构建了一个使用ISessionFactory.GetCurrentSession()
的存储库类来查找其方法应该使用的当前会话,并使用CurrentSessionContext.Bind
绑定我的应用程序中的会话。在NHibernate配置中,我使用thread_static
作为我的current_session_context_class
。
到目前为止,这种方法完美无缺。在每个线程上,我创建了一个将由存储库实例使用的新会话。
但是当我使用System.Threading.Timer
时,将在ThreadPool中的任何线程上调用回调。这样我就不能将会话绑定到一个回调的执行之外,因为下一个回调可以在不同的线程上执行。
如果在回调的两次或多次执行中应该使用一个会话,那么如何在CurrentSessionContext
内处理会话(有或没有System.Threading.Timer
)?
答案 0 :(得分:0)
会话应与工作单元相关联。听起来你只需要在每次回拨时都需要一个新的会话。会话的重量非常轻。