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

NHibernate Db在网络会话中进行的调用

这取决于您的设置。

对于用于查询的每个Session对象,一级缓存将命中DB一次。如果有一个Session与此存储库共享。。将只进行一个DB调用。但是,如果每次对存储库的调用都会导致创建多个Session,则会收到多个调用。这是默认设置。

如果启用了二级缓存,则通过SessionFactory创建的每个Session将共享上述属性。也就是说,如果您有多个存储库,其中包含来自同一个SessionFactory实例的多个Session。。那么从两个存储库加载同一个员工将导致一个DB调用。

这篇文章中有一些很好的信息——它与Hibernate有关,但基本原理仍然适用于NHibernate。

我建议您在web环境中启用二级缓存(我们使用SysCache2)。。这样你就可以保证Session总是在一个请求中共享缓存的对象(当然,假设你的Session生命周期管理是按请求进行的……应该是..)