【问题标题】:NHibernate Desktop App : should it use multiple sessions?NHibernate 桌面应用程序:它应该使用多个会话吗?
【发布时间】:2010-12-01 14:23:08
【问题描述】:

NHibernate 桌面应用程序是否应该使用 SessionFactory 和多个会话? 每个事务一个会话规则是否仅适用于 Web 应用程序?

问候, 疯子

【问题讨论】:

    标签: database nhibernate session


    【解决方案1】:

    是的,NHibernate 桌面应用程序通常应该使用多个会话。

    在两层场景中,您将为每个逻辑“交互会话”使用一个会话,例如给定的“视图”或“屏幕”。在这里,您可以比在 Web 应用程序中更长时间地维护会话,并获得延迟加载的全部好处,但在某些时候,您希望用户“保存”或“取消”并继续进行其他操作,而这通常是结束会话的好地方。

    在整个应用程序中使用单个会话可能会导致大量内容被缓存,并且客户端数据可能会变得陈旧,或者您可能会遇到并发问题。

    此外,一旦会话遇到异常,它就不再有效,您将不得不放弃/重置您正在执行的任何操作。如果这是一种形式,那没什么大不了的,但是如果整个应用程序中有很多对象引用同一个会话,那么它们都会处于受损状态。

    【讨论】:

    • 异常后清理 Session 的正确程序是什么?
    • @Tom 根据 NH 文档,If the ISession throws an exception you should immediately rollback the transaction, call Session.Close() and discard the ISession instance.
    【解决方案2】:

    是的。会话应该尽可能短,因为它被视为一个工作单元。

    因此,我会为每个“用例”创建一个会话。 (一个用例可以跨越多种形式)。

    【讨论】:

      猜你喜欢
      • 2011-02-06
      • 2011-01-14
      • 2016-01-19
      • 2010-09-26
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      相关资源
      最近更新 更多