【问题标题】:Nhibernate 2nd Level Cache for Newb用于 Newb 的 Nhibernate 二级缓存
【发布时间】:2011-05-08 09:02:41
【问题描述】:

我正试图了解 Fluent NHibernate 中的二级缓存。到目前为止,我已经完成了以下工作:

  1. 添加了对缓存 dll 的引用
  2. 在我创建会话工厂时添加了以下内容:

    c.SetProperty("cache.provider_class", "NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache");

    c.SetProperty("cache.use_second_level_cache", "true");

    c.SetProperty("cache.use_query_cache", "true");

  3. 添加了 Cache.ReadWrite();针对我希望缓存在 ClassMap 文件中的所有实体,例如

    公共类 CountryMap : ClassMap { 公共国家地图(){ 表(“国家”); Id(x => x.CountryID); 地图(x => x.CountryName); 缓存.ReadWrite(); } }

现在我假设每当我尝试获取一个在映射中具有 Cache.ReadWrite() 的实体时,它都会在会话工厂(单例)期间缓存它。但是,情况似乎并非如此,因为每个请求都会命中数据库。我有几个问题:

  • 会话上的 CacheMode 属性有什么作用?我的会话在 Web 请求期间持续。我应该在创建会话时设置它吗?如果可以,我应该设置什么?
  • 我在某处读到,除非进行提交,否则不会更新缓存。我只在数据库中插入/更新信息时提交数据。例如,如果我有一个包含国家列表的简单页面,我会获取所有需要的数据,但不会提交数据,因为我不需要进行任何更改。这是否意味着这些数据不会被缓存?我确定我读错了,因为这意味着数据只有在添加到数据库后才会被缓存。

如果您能提供帮助,我将不胜感激。谢谢

【问题讨论】:

    标签: nhibernate second-level-cache


    【解决方案1】:

    您必须使用事务才能使用二级缓存。

    【讨论】:

      【解决方案2】:

      Here 是对带有 nhibernate 的二级缓存的一个很好的解释。

      【讨论】:

        猜你喜欢
        • 2011-09-02
        • 1970-01-01
        • 2011-03-21
        • 2011-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-26
        相关资源
        最近更新 更多