6

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

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

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

我的问题与会话有关。

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

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

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

任何有关会话管理的建议都值得赞赏。

4

2 回答 2

4

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

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

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

于 2010-12-29T01:59:06.680 回答
3

1 - 您可以根据用例的需要拥有尽可能多的会话。

2 - 没关系,基于 1。

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

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

  • 在多个线程中使用同一个会话
  • 将实体从一个会话/UoW 传递到另一个
  • 尝试重用抛出异常的会话(即使您认为自己知道自己在做什么,也不要这样做)
于 2010-12-29T01:50:23.007 回答