Newb的Nhibernate二级缓存

时间:2010-11-11 09:52:24

标签: nhibernate second-level-cache

我正试着在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文件中缓存的所有实体,例如。

    public class CountryMap:ClassMap {     public CountryMap(){         表( “国家”);         Id(x => x.CountryID);         Map(x => x.CountryName);         Cache.ReadWrite();     } }

  4. 现在我假设任何时候我试图获得一个在映射中具有Cache.ReadWrite()的实体,它会在会话工厂(单例)的持续时间内缓存它。然而,似乎并非如此,因为每个请求都会遇到数据库。以下是我的几个问题:

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

    如果你能提供帮助,我会很感激的。感谢

2 个答案:

答案 0 :(得分:3)

对于使用nhibernate的二级缓存,

Here是一个非常好的解释。

答案 1 :(得分:1)

您必须使用事务来使用第二级缓存。