我正试着用流利的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();针对我希望在类映射文件中缓存的所有实体。
公共类CountryMap:ClassMap{
公共国家地图(){
表(“国家”);
Id(x=>x.CountryID);
地图(x=>x.CountryName);
Cache.ReadWrite();
}
}
现在我假设,每当我试图获取映射中包含Cache.ReadWrite()的实体时,它都会在会话工厂(singleton)期间缓存它。但是,似乎情况并非如此,因为每个请求都会命中数据库。我有几个问题:
-
会话上的CacheMode属性的作用是什么?我的会话将持续一个web请求。我应该在创建会话时设置它吗?如果是,应该将其设置为什么?
-
我在某个地方读到,除非提交,否则缓存不会更新。我只在插入/更新数据库中的信息时提交数据。例如,如果我有一个包含国家列表的简单页面,我将获取所需的所有数据,但不会提交数据,因为我不需要做任何更改。这是否意味着这些数据不会被缓存?我肯定我读错了,因为这意味着数据只有在添加到数据库后才会被缓存。
如果你能帮忙,我将不胜感激。谢谢