【问题标题】:How to use NHibernate CurrentSessionContext within a Timer如何在计时器中使用 NHibernate CurrentSessionContext
【发布时间】:2009-10-29 11:57:52
【问题描述】:

我构建了一个存储库类,它使用ISessionFactory.GetCurrentSession() 来查找其方法应使用的当前会话,并使用CurrentSessionContext.Bind 在我的应用程序中绑定会话。在 NHibernate 配置中,我使用 thread_static 作为我的 current_session_context_class

到目前为止,这一切都很好。在每个线程上,我都创建了一个新的会话,供存储库实例使用。

但是当我使用System.Threading.Timer 时,将在 ThreadPool 中的任何线程上调用回调。这样我就不能在执行一个回调之后绑定会话,因为下一个回调可以在不同的线程上执行。

如果一个会话应该用于两次或多次回调执行,应该如何处理System.Threading.Timer 中的会话(使用或不使用CurrentSessionContext)?

【问题讨论】:

  • 为什么你需要为不止一个回调请求使用同一个会话?
  • 因为我的应用程序在后台运行,并且会在每次操作(数据库插入和文件复制)之间等待一定的时间,以防止系统过载。只有当一切都完成后,会话才会被释放。

标签: .net nhibernate session


【解决方案1】:

会话应该与工作单元相关联。听起来您只需要在每次回电时进行新会话。创建会话的重量非常轻。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-05
    • 2019-05-18
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多