In NHibernate
使用时您可以轻松地从一级缓存中受益Load
or Get
方法。但是关于ICriteria
, HQL
, Linq-to-NHibernate
and QueryOver
?他们也使用一级缓存吗?
他们使用它来返回实体,但查询会直接进入数据库,除非您使用二级缓存。
考虑一下:
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);
只会执行一个查询。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)