NHibernate二级缓存不缓存查询缓存

时间:2017-03-24 15:59:15

标签: caching nhibernate fluent-nhibernate second-level-cache

在我们的应用程序配置中,我们已经为NHibernate配置了使用SysCacheProvider启用的二级和查询缓存,配置为Fluently ...

.Cache(x => x.UseQueryCache().ProviderClass<SysCacheProvider>().UseSecondLevelCache())

我们有一个名为Lookup的实体,在其映射文件中标有Cache.ReadOnly(),我们使用CreateCriteria SetCacheable(true).SetCacheMode(CacheMode.Normal)获取它。

问题是似乎没有使用二级缓存。使用NHProf,我们可以看到第一个获取Lookup的查询(通过唯一的字符串ID)被正确缓存,但是在每次调用时,NHibernate都会转到数据库以通过缓存的sql ID获取行,而不是使用第二个等级缓存。

我已经完成了所有事情in this blog,但无济于事。

我还需要做些什么,或者是否有任何陷阱可能意味着实体不会被添加到二级缓存中?

2 个答案:

答案 0 :(得分:1)

您使用的是交易吗?

如果答案为否,请放弃二级缓存,或者开始使用交易。为了确保它仅缓存有效数据,如果在不使用事务的情况下修改数据,缓存类型将自行禁用。

这是一个常见的陷阱,试图在不使用事务的情况下使用缓存,如hereThis也证实了这一点。另一个原因可能是one,更棘手。

答案 1 :(得分:1)

当我们在NServiceBus处理程序中使用NHibernate时,缓存失败了。事实证明,在NSB处理程序中,我们使用的版本为the second level cache is not supported(版本5.x)。