【问题标题】:fluent nhibernate not caching queries in asp.net mvc流利的nhibernate不在asp.net mvc中缓存查询
【发布时间】:2011-02-16 20:31:12
【问题描述】:

我正在使用带有 asp.net mvc 的流畅的 nhibernate,但在对数据库进行查询时,我没有看到任何缓存。我目前没有使用 L2 缓存实现。

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

映射如下:

 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);

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

【问题讨论】:

  • 你打开查询缓存了吗?如果是,配置是什么?

标签: asp.net-mvc nhibernate caching fluent-nhibernate


【解决方案1】:

1 级缓存仅在会话级别,一旦您处理该会话,您的缓存就会随之而来。我假设,像大多数网络应用程序一样,您将按请求进行会话;在这种情况下,它每次都访问数据库是完全正常的。

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

【讨论】:

    【解决方案2】:

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

    这与“1 级”缓存(会话身份映射)没有任何关系*

    如果您将以下属性添加到您的 NHibernate 配置文件:

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

    ...DB 在后续调用中不会被命中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 2012-10-20
      • 2010-12-04
      • 2017-08-17
      相关资源
      最近更新 更多