流畅的nhibernate不在asp.net mvc中缓存查询

时间:2010-05-07 13:43:46

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

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

我是否应该在没有配置进程外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);

每当我按名称请求应用程序cateogry时,它是否会达到预期的行为?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

没有* 与“1级”缓存(会话标识图)有关。

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

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

...在后续通话中不会点击数据库。