我正在编写一个使用NHibernate连接数据库的桌面应用程序。
我的模型有一个会话,在初始化模型时打开,在模型处理时关闭。当我每个表单有一个模型时,这是可以的,因为打开的会话数与打开的窗口数相同 - 只是一个小数字。
我现在正在创建一个列出许多模型的表单,因此如果表单列出了50个模型,那么将有50个开放会话。我怀疑这可能是一个问题。
我可以在NHibernate中打开多少个开放式会话?我应该只有一小部分,还是可以根据需要开设多个公开课程?
答案 0 :(得分:2)
这取决于您保持会话开放的时间以及您使用它们的方式。会话本身非常轻量级,不一定打开与数据库的连接。
但是我认为对于1个表单有50个开放会话并不是最好的设计。我建议使用会话作为“工作单元”,因为当你想要做某事时(例如提供一些数据,或更新一些数据,或列出一堆实体),你打开会话,做你的工作,然后处理会话。这可能会导致延迟加载和数据绑定的一些问题,但您可以通过获取所需的关联来解决这些问题。
您可以使用session.Lock(entity,LockMode.None)将已在一个会话中加载的实体重新连接到另一个会话中,这样您就不需要在用户交互之间打开会话。