Свободное владение NHibernate, автоматическое частное / защищенное свойство как Id - PullRequest
2 голосов
/ 21 февраля 2012

Я хочу скрыть свойство Id первичного ключа от потребителей моих классов сущностей:

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

Создание защищенного свойства Id не работает со стандартным автоматическим сопоставлением, оно не может его найти.

Я попытался переопределить DefaultAutomappingConfiguration.IsId(...), но он вызывается только с публичными участниками.

Как я могу заставить это работать без использования конкретных ClassMap<A> s для каждого типа, как описано здесь: http://wiki.fluentnhibernate.org/Fluent_mapping_private_properties

EDIT: Я хочу изменить автоматическое отображение соглашений , чтобы искать любое свойство с именем '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 голосов
/ 21 февраля 2012

Если вы используете автоматическое сопоставление, реализуйте интерфейс 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"));  
  }  
}
...