我正在使用一个流畅的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时,它是否会达到预期的行为?
答案 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>
...在后续通话中不会点击数据库。