NHibernate的第一级缓存在使用同一会话时可用。 ActiveRecordBase.FindAll()
每次都会创建一个新的ISession
。所以这样的追随者无法从第一级缓存中获利:
void test1()
{
Car.FindAll();
Car.FindAll();
Car.FindAll();
}
有没有解决方案?
答案 0 :(得分:1)
调用多个FindAll()
不会强制执行多个不同的会话。他们都使用相同的会话。 FindAll()
无法受益的原因是它内部使用ICriteria
而ICriteria
本身无法使用第一级缓存。第一级缓存仅适用于Load
和Get
。
有关详情here。
答案 1 :(得分:0)
只要你只使用第一级缓存(基于会话)就行了。 如果启用二级缓存,则可以。
有关一级和二级缓存活跃度的信息,请参阅此处。 http://web.archive.org/web/20110514214657/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx