【问题标题】:ActiveRecordBase.FindAll() does not allow first level cache?ActiveRecordBase.FindAll() 不允许一级缓存?
【发布时间】:2011-02-06 07:42:00
【问题描述】:

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

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

有什么解决办法吗?

【问题讨论】:

    标签: nhibernate caching castle-activerecord findall isession


    【解决方案1】:

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

    更多信息here

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-18
        • 1970-01-01
        • 1970-01-01
        • 2015-06-25
        • 1970-01-01
        • 1970-01-01
        • 2012-11-18
        相关资源
        最近更新 更多