Свободные члены поля карты Nhibernate базового класса с общими параметрами - PullRequest
0 голосов
/ 14 февраля 2011

Я пытаюсь выполнить довольно простое отображение ChildClass, где меня не интересует, чтобы уровень персистентности знал об иерархии классов.

public class BaseClass<T>
{
    public int Id { get; set; }
    public int A;
}

public class ChildClass : BaseClass<object>
{

}

public class ChildClassMap : ClassMap<ChildClass>
{
    public ChildClassMap()
    {
        Not.LazyLoad();
        Id(x => x.Id);
        Map(x => x.A)
            .Access.Field()
            ;
    }
}

Проблемная переменная здесь - A. При попыткепостроить сессионный завод, который я получаю:

NHibernate.PropertyNotFoundException : Could not find field 'A' in class  'Experiments.ChildClass'

До сих пор я нашел два способа исправить это.

  1. Удалить универсальный параметр из BaseClass

    public class BaseClass { ...
    
    public class ChildClass : BaseClass { ...
    
  2. Использовать доступ к свойству вместо поля.

    public class BaseClass {
       ...
       public int A { get; set; }
    
    public class ChildClassMap : ClassMap<ChildClass> {
       ...
       Map(x => x.A)
          .Access.Property()
          ;
    

Я предполагаю, что это является некоторой проблемой из-за отражения универсального типа (хотяесли это намеренное дизайнерское решение NHibernate, я бы хотел понять, почему).

В данный момент я просто отображаю как свойство (используя обходной путь # 2) - но есть ли способ, которым я могу отобразитьмой первый пример в свободно-nhibernate?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...