我最近开始使用NHibernate作为ORM工具开展项目。我阅读了nHibernate中的上下文会话并理解了它背后的想法。我对一个领域有疑问,
让我们说,我有一个员工域,在http调用中,我调用我的存储库来获取员工id = 1,3次。
员工雇员= _employeeRepository.GetEmployee(1);
案例1:这将是一个1分贝的电话 案例2:这将是3分贝的电话。
请指导我。
RGDS 沙
答案 0 :(得分:1)
这取决于您的设置。
第一级缓存会针对您用于查询的每个Session
对象一次命中数据库。如果与此存储库共享一个Session
,则只会进行一次数据库调用。但是,如果每次调用存储库都会导致创建多个Session
,那么您将获得多个调用。这是默认值。
如果启用了二级缓存,则通过Session
创建的每个SessionFactory
将共享上述属性。这意味着,如果您有多个Session
来自同一SessionFactory
实例的存储库,则从两个存储库加载同一个员工将导致单个数据库调用。
There is some good information in this post - 它与Hibernate有关,但基本原则仍然适用于NHibernate。
我建议您在Web环境中启用二级缓存(我们使用SysCache2)。这样您就可以保证Session
始终在一个请求中共享缓存的对象(当然,假设,您的Session
生命周期管理是按请求进行的..应该是..)。