0

我正试图了解 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 { public CountryMap() { Table("Countries"); Id(x => x.CountryID); 地图(x => x.CountryName);缓存.ReadWrite(); } }

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

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

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

4

2 回答 2

3

是使用 nhibernate 进行二级缓存的一个很好的解释。

于 2010-11-11T10:49:52.313 回答
1

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

于 2010-11-11T09:56:37.443 回答