我正在使用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();
}
}
答案 0 :(得分:2)
如果您还没有缓存Employee实体,则需要一个查询来加载它,因为查询缓存将结果存储为ID。
此外,只有在事务中完成所有工作(包括查询)时,NHibernate缓存才有效。