代码之家  ›  专栏  ›  技术社区  ›  Arnis Lapsa

如何创建一个忽略没有setter的属性的流畅nhibernate约定

  •  4
  • Arnis Lapsa  · 技术社区  · 14 年前

    我在找一个 FluentNH (fluent nhibernate)忽略所有没有setter的属性的约定或配置:

    它仍然会映射这些:

    public class foo{
      public virtual int bar {get; private set;}
    }
    

    省略这些:

    public class foo{
      public virtual int fizz{get;private set;}
      public virtual int bar{get {return fizz;}} //<-------
    }
    
    3 回复  |  直到 13 年前
        1
  •  7
  •   mathieu    14 年前

    您应该使用自定义映射配置

    public class DefaultMappingConfiguration : DefaultAutomappingConfiguration
    {
        public override bool ShouldMap(Member member)
        {
            return member.CanWrite;
        }
    }
    

    用途:

    var nhConfiguration = new Configuration().Configure();
    var mappingConfiguration = new DefaultMappingConfiguration();
    
    var.fluentConfiguration = Fluently.Configure(nhConfiguration );
        .Mappings(m => m.AutoMappings.Add(
            AutoMap.AssemblyOf<MappedType>(mappingConfiguration)
        ));
    
    var sessionFactory = this.fluentConfiguration.BuildSessionFactory();
    

    但是,私有setter不会被映射。你应该保护他们

        2
  •  3
  •   Daniel T.    14 年前

    使用此:

    public class DefaultMappingConfiguration : DefaultAutomappingConfiguration
    {
        public override bool ShouldMap(Member member)
        {
            if (member.IsProperty && !member.CanWrite)
            {
                return false;
            }
    
            return base.ShouldMap(member);
        }
    }
    

    这应该处理没有setter和private setter的情况。

        3
  •  0
  •   dariol    13 年前

    我知道这是一个古老的问题,但是下面的代码对私有setter很好。

    public override bool ShouldMap(Member member)
    {
        var prop = member.DeclaringType.GetProperty(member.Name);
        bool isPropertyToMap = 
            prop != null &&
            prop.GetSetMethod(true) != null &&
            member.IsProperty;
    
        return
            base.ShouldMap(member) && isPropertyToMap;
    }