C# 在web会话中进行的NHibernate Db调用

C# 在web会话中进行的NHibernate Db调用,c#,asp.net-mvc-4,nhibernate,C#,Asp.net Mvc 4,Nhibernate,我最近开始从事一个使用NHibernate作为ORM工具的项目。我阅读了NHibernate中的上下文会话并理解了其背后的思想。我有一个疑问 比方说,我有一个雇员域,在一个http调用中,我调用我的存储库来获取雇员id=1,3次 Employee=\u employeeRepository.GetEmployee(1) 案例1:这将是一个1dB的呼叫 案例2:将是3个db呼叫 请在这方面指导我 rgds 桑迪这取决于您的设置 第一级缓存将针对用于查询的每个会话对象命中数据库一次。如果存在与此存储

我最近开始从事一个使用NHibernate作为ORM工具的项目。我阅读了NHibernate中的上下文会话并理解了其背后的思想。我有一个疑问

比方说,我有一个雇员域,在一个http调用中,我调用我的存储库来获取雇员id=1,3次

Employee=\u employeeRepository.GetEmployee(1)

案例1:这将是一个1dB的呼叫 案例2:将是3个db呼叫

请在这方面指导我

rgds
桑迪

这取决于您的设置

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

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

-与Hibernate相关,但基本原则仍适用于NHibernate


我建议您在web环境中启用二级缓存(我们使用SysCache2)。。因此,您可以保证
会话
始终在单个请求中共享缓存对象(当然,假设您的
会话
生命周期管理是每个请求..应该是..)。

感谢Simon的解释