可以将第一级缓存与ICriteria或其他API一起使用吗?

时间:2011-02-07 09:21:14

标签: nhibernate caching icriteria first-level-cache

NHibernate中,使用LoadGet方法时,您可以轻松地从第一级缓存中受益。但是ICriteriaHQLLinq-to-NHibernateQueryOver呢?他们也使用一级缓存吗?

2 个答案:

答案 0 :(得分:5)

他们将它用于返回实体,但除非您使用二级缓存,否则查询会直接进入数据库。

考虑一下:

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);

只会执行一个查询。

答案 1 :(得分:0)

不,据我所知,他们没有。他们只使用二级缓存。第一级缓存仅适用于GetLoad