使用NHibernate缓存整个表

时间:2011-07-09 08:06:19

标签: .net nhibernate caching

有没有办法告诉NHibernate(2.0)整个表总是必须保存在二级缓存中?或者有没有办法拦截缓存未命中,或者当NHibernate试图加载单个实体并重定向该查询以加载整个表时?

3 个答案:

答案 0 :(得分:2)

最简单的方法是在该实体上启用二级缓存,并在应用程序启动时执行一个将加载所有这些缓存的查询。
它不会保证它总是存在(缓存可以出于多种原因被刷新/删除),但它可能对你来说已经足够了。

或者 - 您可以通过使用System.Cache

来自己实现这样的事情

答案 1 :(得分:0)

你有没有看到这个post on S.O?好吧它的休眠,但我怀疑你可以将相同的主体应用于NHibernate。

  

我们最终通过存储来解决这个问题   记忆所有的主键   我们需要的表中的实体   加载(因为它们是模板数据   并没有新的模板   添加/删除)。

     

然后我们可以使用这个主要列表   查找每个实体的密钥   利用Hibernates 1级和2级   高速缓存中。

答案 2 :(得分:0)

我们需要创建一个自定义的Get函数而不是session.Get()。首先得到一个IEntityPersister:session.GetSessionImplementation()。GetEntityPersister(new T())。很难看,因为Type参数没有重载,但是有效。然后我们可以获取缓存,并检查实体是否在缓存中。如果不是,则从数据库加载所有元素。这样,当使用这个自定义Get函数时,NHibernate将永远不会一个一个地加载实体,而是一次性加载它们,它将缓存它们,直到它过期,然后以相同的方式再次加载它们。