代码之家  ›  专栏  ›  技术社区  ›  AwkwardCoder

fluent nhibernate不在ASP.NET MVC中缓存查询

  •  1
  • AwkwardCoder  · 技术社区  · 14 年前

    我使用的是一个与ASP.NET MVC配合使用的流畅的nhibernate,在对数据库进行查询时,我没有看到任何缓存。我目前没有使用二级缓存实现。

    我是否应该看到在不配置进程外二级缓存的情况下缓存查询?

    映射如下:

     Table("ApplicationCategories");
     Not.LazyLoad();
     Cache.ReadWrite().IncludeAll();
     Id(x => x.Id);
     Map(x => x.Name).Not.Nullable();
     Map(x => x.Description).Nullable();
    

    示例条件:

     return session
              .CreateCriteria<ApplicationCategory>()
              .Add(Restrictions.Eq("Name", _name))
              .SetCacheable(true);
    

    每次我按名称请求一个应用程序类别时,它访问数据库,这是预期的行为吗?

    2 回复  |  直到 14 年前
        1
  •  3
  •   James Gregory    14 年前

    级别1缓存仅在会话级别,一旦释放该会话,您的缓存将与之一起使用。我假设,像大多数Web应用程序一样,您将按请求进行会话;在这种情况下,每次访问数据库都是完全正常的。

    当您要在同一个会话中执行相同(或类似)查询时,1级缓存最有用,在这种情况下,您只会看到对数据库的一次调用。

        2
  •  1
  •   Diego Mijelshon    14 年前

    您需要启用二级缓存和查询缓存才能缓存查询。

    这个有 什么都没有* 处理“级别1”缓存(会话标识映射)。

    如果将以下属性添加到nhibernate配置文件中:

    <property name="cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property>
    <property name="cache.use_query_cache">true</property>
    

    …在随后的调用中不会命中数据库。