【发布时间】:2010-12-01 14:23:08
【问题描述】:
NHibernate 桌面应用程序是否应该使用 SessionFactory 和多个会话? 每个事务一个会话规则是否仅适用于 Web 应用程序?
问候, 疯子
【问题讨论】:
标签: database nhibernate session
NHibernate 桌面应用程序是否应该使用 SessionFactory 和多个会话? 每个事务一个会话规则是否仅适用于 Web 应用程序?
问候, 疯子
【问题讨论】:
标签: database nhibernate session
是的,NHibernate 桌面应用程序通常应该使用多个会话。
在两层场景中,您将为每个逻辑“交互会话”使用一个会话,例如给定的“视图”或“屏幕”。在这里,您可以比在 Web 应用程序中更长时间地维护会话,并获得延迟加载的全部好处,但在某些时候,您希望用户“保存”或“取消”并继续进行其他操作,而这通常是结束会话的好地方。
在整个应用程序中使用单个会话可能会导致大量内容被缓存,并且客户端数据可能会变得陈旧,或者您可能会遇到并发问题。
此外,一旦会话遇到异常,它就不再有效,您将不得不放弃/重置您正在执行的任何操作。如果这是一种形式,那没什么大不了的,但是如果整个应用程序中有很多对象引用同一个会话,那么它们都会处于受损状态。
【讨论】:
If the ISession throws an exception you should immediately rollback the transaction, call Session.Close() and discard the ISession instance.
是的。会话应该尽可能短,因为它被视为一个工作单元。
因此,我会为每个“用例”创建一个会话。 (一个用例可以跨越多种形式)。
【讨论】: