当一个人使用相同的会话时,NHibernate的一级缓存可用。 ActiveRecordBase.FindAll()
每次创建一个新的ISession
。所以这样一个以下不能从一级缓存中获利:ActiveRecordBase.FindAll()不允许第一级缓存?
void test1()
{
Car.FindAll();
Car.FindAll();
Car.FindAll();
}
有没有解决方法?
当一个人使用相同的会话时,NHibernate的一级缓存可用。 ActiveRecordBase.FindAll()
每次创建一个新的ISession
。所以这样一个以下不能从一级缓存中获利:ActiveRecordBase.FindAll()不允许第一级缓存?
void test1()
{
Car.FindAll();
Car.FindAll();
Car.FindAll();
}
有没有解决方法?
调用几个FindAll()
不会强制几个不同的会话。他们都使用同一个会话。 FindAll()
不能带来好处的原因是它内部使用ICriteria
和ICriteria
本身不能使用一级缓存。一级缓存仅适用于Load
和Get
。
更多信息可用here。
只要你只使用一级缓存(基于会话)。 如果启用二级缓存,则可以。
请参阅此处了解有关第一级和第二级高速缓存活跃性的信息。 http://web.archive.org/web/20110514214657/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx