2012-05-23 29 views
0

我正在写一个使用NHibernate连接到数据库的桌面应用程序。我可以在NHibernate中打开多少个会话?

我的模型有一个会话,当模型初始化时打开,当模型被处理时关闭。当每个表单有一个模型时,这是可以的,因为打开的会话数量与打开的窗口数量相同 - 只是一小部分。

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

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

回答

2

这取决于您保持会话持续多久,以及您如何处理它们。会话本身非常轻便,并不一定会打开与数据库的连接。

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

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

+0

谢谢。我最初有一个工作单元设计,但在阅读本文后我开始更改它:http://msdn.microsoft.com/en-us/magazine/ee819139.aspx但是,我不相信这篇文章是这么好,所以我可能会改回来。 – Oliver

+0

我认为那篇文章不好,但这取决于你的需求。如果你的应用程序将打开50个表单,那么你需要一个不同的方法。这也取决于表格的开放时间和使用方式。 –

相关问题