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

时间:2014-04-12 08:15:07

标签: c# asp.net-mvc-4 nhibernate

我最近开始使用NHibernate作为ORM工具开展项目。我阅读了nHibernate中的上下文会话并理解了它背后的想法。我对一个领域有疑问,

让我们说,我有一个员工域,在http调用中,我调用我的存储库来获取员工id = 1,3次。

员工雇员= _employeeRepository.GetEmployee(1);

案例1:这将是一个1分贝的电话 案例2:这将是3分贝的电话。

请指导我。

RGDS 沙

1 个答案:

答案 0 :(得分:1)

这取决于您的设置。

第一级缓存会针对您用于查询的每个Session对象一次命中数据库。如果与此存储库共享一个Session,则只会进行一次数据库调用。但是,如果每次调用存储库都会导致创建多个Session,那么您将获得多个调用。这是默认值。

如果启用了二级缓存,则通过Session创建的每个SessionFactory将共享上述属性。这意味着,如果您有多个Session来自同一SessionFactory实例的存储库,则从两个存储库加载同一个员工将导致单个数据库调用。

There is some good information in this post - 它与Hibernate有关,但基本原则仍然适用于NHibernate。

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