NHibernate Db在网络会话中进行的调用
本文关键字:调用 会话 Db 网络 NHibernate | 更新日期: 2023-09-27 17:58:04
我最近开始使用NHibernate作为ORM工具进行一个项目。我在nHibernate上读到了上下文会话,并理解了它背后的想法。我对这一领域有疑问
比方说,我有一个雇员域,在http调用中,我调用我的存储库,得到雇员id=1.3次。
Employee Employee=_eemployeeRepository.GetEmployee(1);
情况1:这将是一个1db的调用情况2:将是3 db调用。
请指导我。
rgdsSandy
这取决于您的设置。
对于用于查询的每个Session
对象,一级缓存将命中DB一次。如果有一个Session
与此存储库共享。。将只进行一个DB调用。但是,如果每次对存储库的调用都会导致创建多个Session
,则会收到多个调用。这是默认设置。
如果启用了二级缓存,则通过SessionFactory
创建的每个Session
将共享上述属性。也就是说,如果您有多个存储库,其中包含来自同一个SessionFactory
实例的多个Session
。。那么从两个存储库加载同一个员工将导致一个DB调用。
这篇文章中有一些很好的信息——它与Hibernate有关,但基本原理仍然适用于NHibernate。
我建议您在web环境中启用二级缓存(我们使用SysCache2)。。这样你就可以保证Session
总是在一个请求中共享缓存的对象(当然,假设你的Session
生命周期管理是按请求进行的……应该是..)