ActiveRecordBase.FindAll()不允许第一级缓存?

时间:2011-02-06 07:42:00

标签: nhibernate caching castle-activerecord findall isession

NHibernate的第一级缓存在使用同一会话时可用。 ActiveRecordBase.FindAll()每次都会创建一个新的ISession。所以这样的追随者无法从第一级缓存中获利:

void test1()
{
  Car.FindAll();
  Car.FindAll();
  Car.FindAll();
}

有没有解决方案?

2 个答案:

答案 0 :(得分:1)

调用多个FindAll()不会强制执行多个不同的会话。他们都使用相同的会话。 FindAll()无法受益的原因是它内部使用ICriteriaICriteria本身无法使用第一级缓存。第一级缓存仅适用于LoadGet

有关详情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