Fluent NHibernate将私有/受保护属性自动化为Id

时间:2012-02-21 16:22:46

标签: c# .net fluent-nhibernate automapping

我想隐藏我的实体类的使用者的主键Id属性:

public class A
{
    protected virtual int Id { get; set; }
    public virtual string Name { get; set; }
    ... etc ...
}

使Id属性受保护不适用于标准自动映射,它无法找到它。

我尝试覆盖DefaultAutomappingConfiguration.IsId(...),但这只会被公共成员回复。

如何在不对每种类型使用特定ClassMap<A>的情况下使其工作,如下所示: http://wiki.fluentnhibernate.org/Fluent_mapping_private_properties

编辑: 我想更改自动化约定以查找名称为“Id”的任何属性,而不仅仅是公共属性。我希望使用ClassMap<T>按类进行配置,如下所示:

public ClassAMap: ClassMap<A>
{  
    public ClassAMap()  
    {  
        Id(Reveal.Member<ClassAMap>("Id"));  
    }  
}
public ClassBMap: ClassMap<B>
{  
    public ClassBMap()  
    {  
        Id(Reveal.Member<ClassBMap>("Id"));  
    }  
}
... etc ...

1 个答案:

答案 0 :(得分:0)

如果您使用自动化实现IIdConvention接口

public class PrimaryKeyConvention : IIdConvention
{
  public void Apply(IIdentityInstance instance)
  {
    instance.Column(instance.EntityType.Name + "Id");
  }
}

或覆盖默认自动映射,如下所示:

public ProductMap : ClassMap<Product>
{  
  public ProductMap()  
  {  
    Id(Reveal.Member<Product>("Id"));  
  }  
}