【问题标题】:cache entire table with NHibernate使用 NHibernate 缓存整个表
【发布时间】:2011-10-01 18:59:29
【问题描述】:

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

【问题讨论】:

    标签: .net nhibernate caching


    【解决方案1】:

    你看到另一个post on S.O了吗?好的,它的休眠状态,但我怀疑您可以将相同的原则应用于 NHibernate。

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

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

    【讨论】:

      【解决方案2】:

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

      或者-您可以通过使用 System.Cache 自己实现这样的事情

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2011-08-15
          • 2016-07-26
          • 2011-02-09
          • 2013-06-28
          • 1970-01-01
          • 2011-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多