NHibernate会话管理建议

时间:2010-12-29 00:22:11

标签: c# winforms nhibernate session unitofworkapplication

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

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

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

我的问题与Sessions有关。

  1. 每个线程一次只能运行一个会话吗?

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

  3. 我们可以在一个帖子上有一个会话词典吗?

  4. 对会话管理的任何建议表示赞赏。

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

1 - 您可以根据用例需要设置多个会话。

2 - 没关系,基于1。

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

除非你真的知道自己在做什么,为什么这样做,否则你不应该做什么:

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