WPF,Nhibernate v2会话持久性

WPF,Nhibernate v2会话持久性,wpf,nhibernate,persistence,Wpf,Nhibernate,Persistence,我有一个WPF应用程序,它通过prism/MEF将模块加载到我的应用程序中。每个模块将引用我创建的一个程序集,该程序集包含NHibernate功能(工作单元和存储库模式)。现在我开始学习第一个模块,出现了以下问题: 在WPF/windows应用程序的生命周期内打开nhibernate会话是否常见 在所有模块之间共享nhibernate会话还是让每个模块创建自己的会话 我的理解是会话是轻量级的,因此打开和关闭会话不是问题。。。但是,如果我关闭会话,那么我将丢失更改跟踪。。。当我调用Save时,

我有一个WPF应用程序,它通过prism/MEF将模块加载到我的应用程序中。每个模块将引用我创建的一个程序集,该程序集包含NHibernate功能(工作单元和存储库模式)。现在我开始学习第一个模块,出现了以下问题:

  • 在WPF/windows应用程序的生命周期内打开nhibernate会话是否常见
  • 在所有模块之间共享nhibernate会话还是让每个模块创建自己的会话
我的理解是会话是轻量级的,因此打开和关闭会话不是问题。。。但是,如果我关闭会话,那么我将丢失更改跟踪。。。当我调用Save时,对象与检索时相同,我不希望执行查询

  • 在wpf/windows应用程序的生命周期内不要打开会话。如果这样做,您将遇到性能和内存问题

  • 这实际上取决于这些模块如何交互。它们是独立的系统,还是需要协同工作才能工作。如果是前者,我会说他们不应该分享课程。如果是后者,我会使用某种会话管理器来传递当前会话


  • 谢谢你的意见。如果在应用程序的生命周期内保持会话打开是个坏主意,那么在我的情况下,在modulesHi Chris之间共享会话是没有意义的,我有一个类似的场景,我使用可观察的集合并从XAML视图绑定到它们。由于更高级别的实体可以从应用程序的其他部分更新,而不仅仅是从一个视图更新,因此在应用程序的生命周期中使用会话是有意义的。到目前为止,我对1500份有相关实体的记录没有任何问题。。