fluent nhibernate一级缓存未按预期工作

fluent nhibernate一级缓存未按预期工作,nhibernate,fluent-nhibernate,linq-to-nhibernate,nhibernate-caches,Nhibernate,Fluent Nhibernate,Linq To Nhibernate,Nhibernate Caches,我有一个函数,在一个会话中被多次调用。根据我对NHibernate一级缓存的理解,同一会话中的精确查询将只执行一次,而与调用次数无关 但事实并非如此。下面是代码片段,我可以看到在NHProfiler中执行查询的次数与调用函数的次数相同 public List<CustomerType> GetAllActiveCustomerTypes() { return _unitOfWork.CurrentSession.QueryOver<Custome

我有一个函数,在一个会话中被多次调用。根据我对NHibernate一级缓存的理解,同一会话中的精确查询将只执行一次,而与调用次数无关

但事实并非如此。下面是代码片段,我可以看到在NHProfiler中执行查询的次数与调用函数的次数相同

    public List<CustomerType> GetAllActiveCustomerTypes()
    {
        return _unitOfWork.CurrentSession.QueryOver<CustomerType>().Where(x => x.Active).List();
    }
public List getAllActivieCustomerTypes()
{
返回_unitOfWork.CurrentSession.QueryOver().Where(x=>x.Active).List();
}
我是不是在理解NHibernate的过程中遗漏了什么


谢谢你的经验是正确的。会话一级缓存不会缓存查询。要扩展理解,请阅读以下内容:

一级缓存的提取:

…第一级缓存也称为身份映射,不使用 只有减少往返数据库的次数才能提高效率 一个应用程序的速度还要保证没有 存在具有相同id的对象的两个不同实例

…使用NHibernate时,一级缓存将自动 只要使用标准会话对象,就会启用。。。什么时候 NHibernate正在通过其唯一id从数据库加载实体 然后它会自动放入所谓的身份映射

如上所述,它用于
实体
缓存目的

第二级缓存提取:

  • 。。。可以在二级缓存中缓存单个实体或整个聚合
  • 。。。还可以在二级缓存中缓存(复杂和/或耗时)查询