代码之家  ›  专栏  ›  技术社区  ›  nfplee

新用户的Nhibernate二级缓存

  •  0
  • nfplee  · 技术社区  · 14 年前

    我正试着用流利的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();针对我希望在类映射文件中缓存的所有实体。

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

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

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

    如果你能帮忙,我将不胜感激。谢谢

    2 回复  |  直到 13 年前
        1
  •  3
  •   David    13 年前

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

        2
  •  1
  •   kÍ©eÍ£mÍ®pÍ¥ Í©    14 年前

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