【问题标题】:NHibernate Session Management AdviceNHibernate 会话管理建议
【发布时间】:2010-12-29 00:22:11
【问题描述】:

我需要一些关于 C# WinForms 应用程序的 NHibernate 会话管理的建议。

我目前正在移植一个应用程序以使用 NHibernate。我还采用了 UnitOfWork 模式,如下面的链接所述;

http://nhforge.org/wikis/patternsandpractices/nhibernate-and-the-unit-of-work-pattern.aspx

我的问题与会话有关。

  1. 能否始终让每个线程只运行一个会话?

  2. 我有一个场景,其中会话 (UnitOfWork) 可能为应用程序显示的表单打开,但用户打开另一个表单(即工具 - 选项),我希望拥有自己的 UnitOfWork。显然,在这种情况下,为“工具 - 选项”表单打开另一个会话而不使用当前打开的会话用于基础表单会更有意义。

  3. 我们可以在一个线程上创建一个会话字典吗?

感谢任何有关会话管理的建议。

【问题讨论】:

    标签: c# winforms nhibernate session unitofworkapplication


    【解决方案1】:

    +1 杰伊所说的话。我还建议阅读 Oren Eini 关于使用 NHibernate 构建桌面待办事项应用程序的文章:

    http://msdn.microsoft.com/en-us/magazine/ee819139.aspx

    它使用 WPF 作为 UI 技术,但他所说的一切(桌面应用程序中的 NHibernate)都与 WinForms 同样相关。

    【讨论】:

      【解决方案2】:

      1 - 您可以根据用例的需要拥有任意数量的会话。

      2 - 没关系,基于 1。

      3 - 您可以将会话变量放入字典或任何其他集合中。

      除非您真的知道自己在做什么以及为什么,否则您不应该做什么:

      • 在多个线程中使用同一个会话
      • 将实体从一个会话/UoW 传递到另一个
      • 尝试重用已引发异常的会话(即使您认为自己知道自己在做什么,也不要这样做)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-15
        • 1970-01-01
        • 2010-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多