Nhibernate用于新手的二级缓存

Nhibernate用于新手的二级缓存,nhibernate,second-level-cache,Nhibernate,Second Level Cache,我正试着用Fluent NHibernate了解二级缓存。到目前为止,我已经做了以下工作: 添加了对缓存dll的引用 在创建会话工厂时添加了以下内容: c、 SetProperty(“cache.provider_class”,“NHibernate.Caches.SysCache.SysCacheProvider,NHibernate.Caches.SysCache”) c、 SetProperty(“缓存。使用二级缓存”,“true”) c、 SetProperty(“cache.use_q

我正试着用Fluent NHibernate了解二级缓存。到目前为止,我已经做了以下工作:

  • 添加了对缓存dll的引用
  • 在创建会话工厂时添加了以下内容:

    c、 SetProperty(“cache.provider_class”,“NHibernate.Caches.SysCache.SysCacheProvider,NHibernate.Caches.SysCache”)

    c、 SetProperty(“缓存。使用二级缓存”,“true”)

    c、 SetProperty(“cache.use_query_cache”,“true”)

  • 添加了Cache.ReadWrite();针对我希望缓存在类映射文件中的所有实体,例如

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

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

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

    如果你能帮忙,我将不胜感激。感谢您,您必须使用事务才能使用二级缓存。

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

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

    对于使用nhibernate的二级缓存是一个很好的解释