我正试图了解 Fluent NHibernate 中的二级缓存。到目前为止,我已经完成了以下工作:
- 添加了对缓存 dll 的引用
在我创建会话工厂时添加了以下内容:
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");
添加了 Cache.ReadWrite(); 针对我希望缓存在 ClassMap 文件中的所有实体,例如
公共类 CountryMap : ClassMap { public CountryMap() { Table("Countries"); Id(x => x.CountryID); 地图(x => x.CountryName);缓存.ReadWrite(); } }
现在我假设每当我尝试获取一个在映射中具有 Cache.ReadWrite() 的实体时,它都会在会话工厂(单例)期间缓存它。但是,情况似乎并非如此,因为每个请求都会命中数据库。这是我有几个问题:
- 会话上的 CacheMode 属性有什么作用?我的会话在 Web 请求期间持续。我应该在创建会话时设置它吗?如果是,我应该将它设置为什么?
- 我在某处读到,除非进行提交,否则不会更新缓存。我只在数据库中插入/更新信息时提交数据。例如,如果我有一个包含国家/地区列表的简单页面,我会获取所有需要的数据,但不会提交数据,因为我不需要进行任何更改。这是否意味着这些数据不会被缓存?我确定我读错了,因为这意味着数据只有在添加到数据库后才会被缓存。
如果您能提供帮助,我将不胜感激。谢谢