0

NHibernate 的一级缓存在使用相同会话时可用。ActiveRecordBase.FindAll()每次创建一个新的ISession. 所以这样的下面不能从一级缓存中获利:

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

有什么解决办法吗?

4

2 回答 2

1

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

更多信息在这里

于 2011-02-08T04:09:50.557 回答
0

只要您只使用一级缓存(基于会话)就不会。如果启用二级缓存,则可以。

有关一级和二级缓存活跃度的信息,请参见此处。http://web.archive.org/web/20110514214657/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx

于 2011-02-06T10:07:06.297 回答