有没有办法告诉NHibernate(2.0)整个表总是必须保存在二级缓存中?或者有没有办法拦截缓存未命中,或者当NHibernate试图加载单个实体并重定向该查询以加载整个表时?
答案 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将永远不会一个一个地加载实体,而是一次性加载它们,它将缓存它们,直到它过期,然后以相同的方式再次加载它们。