在Fluent Nhibernate中禁用缓存以获取特定覆盖

时间:2012-12-13 09:07:30

标签: fluent-nhibernate fluent-nhibernate-mapping

我们正在使用Fluent NHibernate进行基于约定的映射。映射看起来像这样:

            .Conventions.Add
            (
                Table.Is(x => string.Concat(x.EntityType.Name.ToLower(), "s")),
                PrimaryKey.Name.Is(x => "Id"),
                DefaultLazy.Always(),
                DefaultCascade.SaveUpdate(),
                AutoImport.Never(),
                Cache.Is(x => x.ReadWrite())
            )

对于我们的大多数对象来说,这是完美的,但在某些对象上,我希望禁用二级缓存。但是,似乎我无法做到这一点。 Cache.None没有流畅的选项。我甚至尝试过Not.Cache(),但这也不起作用。

有没有人对如何为某些选定的模型对象禁用缓存有任何想法?

1 个答案:

答案 0 :(得分:2)

好吧,经过深思熟虑后,我设法找到了它:

  1. 删除快捷方式Cache.Is(x => x.ReadWrite()
  2. 创建一个新的约定类:
  3. public class CacheableConvention: IClassConventionAcceptance, IClassConvention 
    {
        public void Accept(IAcceptanceCriteria criteria)
        {
            criteria.Expect(x => x.EntityType.IsNotAny(typeof(Content), typeof(InstanceSetting), typeof(Profanity))); 
        }
    
        public void Apply(IClassInstance instance)
        {
            instance.Cache.ReadWrite();
        }
    }
    
    1. 将约定添加到AutoMappings。
    2. 完成!