NHibernate 的一级缓存在使用相同会话时可用。ActiveRecordBase.FindAll()
每次创建一个新的ISession
. 所以这样的下面不能从一级缓存中获利:
void test1()
{
Car.FindAll();
Car.FindAll();
Car.FindAll();
}
有什么解决办法吗?
NHibernate 的一级缓存在使用相同会话时可用。ActiveRecordBase.FindAll()
每次创建一个新的ISession
. 所以这样的下面不能从一级缓存中获利:
void test1()
{
Car.FindAll();
Car.FindAll();
Car.FindAll();
}
有什么解决办法吗?
调用多个FindAll()
不会强制执行多个不同的会话。他们都使用同一个会话。FindAll()
不能受益的原因是它内部使用ICriteria
并且ICriteria
本身不能使用一级缓存。一级缓存仅适用于Load
和Get
。
更多信息在这里。
只要您只使用一级缓存(基于会话)就不会。如果启用二级缓存,则可以。
有关一级和二级缓存活跃度的信息,请参见此处。http://web.archive.org/web/20110514214657/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx