我有如下代码:
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>