2010-12-10 94 views
1

hi 我正在设计我的第一个asp.net web应用程序,使用nHibernate作为数据提供程序。使用nhibernate的web应用程序体系结构

我读过很多关于nhibernate在web应用程序中使用session-per-request模式。 我的应用程序将有几个页面是“监视器”,意思是它们每隔几秒自动更新一次以反映数据的最近更改。在这种情况下,我的想法是,为每个请求打开一个会话没有什么意义,因为我知道几秒钟后就会有相同的请求。

我的想法是会话每会话对我来说会更有意义,但我在找到实现示例时遇到了问题。 我很感激任何好的资源,如何实现会话每会话,以及任何其他想法/建议,你可能有。

感谢

的Jhonny

回答

1

会话,每个请求仍然是一个好主意,因为你不知道,在网络之情况,当通话结束。打开/关闭会话没有太多开销,并且连接只在会话处于事务中时保持打开状态。 ,并且,由于会话包装了数据库连接,因此只需通过保持会话打开即可从连接池中使用连接。

如果你被困在会话每会话的东西,看看NHibernate.Burrow - 这处理所有的对话/会话管理的东西给你。

+0

建议是好的,但你有一个错误点:会话不**保持连接打开,除非在事务中。 – 2010-12-10 14:35:11

+0

我首先关注的是开放的数据库连接,但正如迭戈指出的那样,他们只在交易开放时才开放。 开放会话的动机之一就是利用其缓存机制,因为有些对象不可能经常更改(例如,如果我监视我店内的库存,店铺部门和部门不太可能改变,而库存水平显然是)。 但是再次,也许我可以利用nhibernate的二级缓存..任何想法? – 2010-12-11 15:36:47

+0

好吧,我从11月11日开始就学习了nHibernate和2nd级缓存...... :)的确如此,我使用session-per-request,建议使用,第二级缓存保存(相对)静态数据(部门和部门)。它的工作原理非常好。谢谢! – 2011-03-16 16:40:06

0

如果您要使用会话每会话,在我看来,对于监控页面而言,整个用户会话期间会话正在进行。我不会推荐这种方法,因为在这种情况下有太多的问题机会。我建议打开一个IStatelessSession来更新监视器数据显示,因为这样可以让您获得短暂会话的好处,而无需跟踪对象状态的开销。