没有使用NHibernate查询缓存

时间:2011-05-19 01:47:19

标签: nhibernate

我正在使用NH 2.1.2.4。

我使用Fluent NHibernate进行查询缓存设置,如下所示:

MsSqlConfiguration.MsSql2005
    .Cache(c => c.UseQueryCache()
            .ProviderClass(typeof(NHibernate.Caches.SysCache2.SysCacheProvider)))

我的标准如下:

Session.CreateCriteria<Employee>()
    .Add(Restrictions.Eq("Username", username))
    .SetMaxResults(1)
    .SetCacheable(true)
    .UniqueResult<Employee>();

但是,当我使用SQL事件探查器时,我可以看到仍然始终对数据库执行查询。没有对Employee表进行插入或更新。 为什么不起作用?

我的Employee映射类将Employee指定为可缓存,如下所示:

public sealed class EmployeeDbMap : ClassMap<Employee>
{
    public EmployeeDbMap()
    {
        ....

        Cache.ReadWrite();
    }
} 

BTW我看到Stackoverflow上有很多相关的问题,但似乎都没有好的答案:herehere

1 个答案:

答案 0 :(得分:2)

如果您还没有缓存Employee实体,则需要一个查询来加载它,因为查询缓存将结果存储为ID。

此外,只有在事务中完成所有工作(包括查询)时,NHibernate缓存才有效。