0

我正在编写一个使用 NHibernate 连接到数据库的桌面应用程序。

我的模型有一个会话,它在模型初始化时打开,在模型被释放时关闭。当我每个表单有一个模型时,这没关系,因为打开的会话数与打开的窗口数相同 - 数量很少。

我现在正在制作一个列出许多模型的表单,所以如果表单列出了 50 个模型,那么将有 50 个打开的会话。我怀疑这可能是个问题。

我可以在 NHibernate 中打开多少个会话?我应该只有一小部分,还是我可以根据需要有尽可能多的开放会话?

4

1 回答 1

2

这取决于您将会话保持多长时间以及您如何处理它们。会话本身非常轻量级,不一定打开与数据库的连接。

但是,我认为为 1 个表单设置 50 个公开会话并不是最好的设计。我建议将会话用作“工作单元”,因为当您想做某事(例如呈现一些数据,或更新一些数据,或列出一堆实体)时,您打开会话,做您的工作,然后处理会话。这可能会导致延迟加载和数据绑定出现一些问题,但您可以通过获取所需的关联来解决这些问题。

您可以使用 session.Lock(entity, LockMode.None) 将已在一个会话中加载的实体重新连接到另一个会话,因此您无需在用户交互之间打开会话。

于 2012-05-23T13:11:11.683 回答