【发布时间】:2011-02-07 09:21:13
【问题描述】:
在NHibernate 中,使用Load 或Get 方法时,您可以轻松地从一级缓存中受益。但是ICriteria、HQL、Linq-to-NHibernate 和QueryOver 呢?他们也使用一级缓存吗?
【问题讨论】:
标签: nhibernate caching icriteria first-level-cache
在NHibernate 中,使用Load 或Get 方法时,您可以轻松地从一级缓存中受益。但是ICriteria、HQL、Linq-to-NHibernate 和QueryOver 呢?他们也使用一级缓存吗?
【问题讨论】:
标签: nhibernate caching icriteria first-level-cache
他们使用它来返回实体,但查询直接进入数据库,除非您使用二级缓存。
考虑一下:
var fooUsingGet = session.Get<Foo>(fooId);
var fooQueryById = session.Query<Foo>().Single(f => f.Id == fooId);
执行了两个查询(一个用于 Get,一个用于 Query),但两个变量都包含相同的对象引用。
现在,如果您启用二级缓存、查询缓存并为查询指定缓存:
var fooQueryById = session.Query<Foo>().Cacheable()
.Single(f => f.Id == fooId);
var fooQueryByIdAgain = session.Query<Foo>().Cacheable()
.Single(f => f.Id == fooId);
只会执行一个查询。
【讨论】:
不,据我了解,他们没有。他们只使用二级缓存。一级缓存仅适用于Get 和Load。
【讨论】: