我有如下代码:

Public Shared Function FindByID(ByVal SearchID As Long) As MyClass
    If (MyClass.FindAllByProperty("ID", SearchID).Count = 0) Then Return Nothing
    Return MyClass.FindAllByProperty("ID", SearchID).First
End Function

如果我打开数据库跟踪,它似乎正在对数据库进行两次调用。我的理解是默认情况下,activerecord会缓存对象。它不缓存查找调用的结果吗?假设在这种情况下,我可以很容易地调整代码,使其只调用一次方法,但是在其他情况下,我可能希望在多个地方进行相同的find()调用,如果我想存储第一个方法的结果,则需要添加一些额外的状态。

最佳答案

我想你很可能想从nhibernate那里得到second level caching。您需要在配置中执行以下操作:

<configSections>
        <section name="syscache" type="NHibernate.Caches.SysCache.SysCacheSectionHandler,NHibernate.Caches.SysCache"/>

</configSections>

    <syscache>
        <cache region="YourEntityHere" expiration="86400" priority="1"/>
        <cache region="YourOtherEntity" expiration="86400" priority="1"/>
    </syscache>

07-26 05:17