Я пытаюсь выполнить довольно простое отображение 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'
До сих пор я нашел два способа исправить это.
Удалить универсальный параметр из BaseClass
public class BaseClass { ...
public class ChildClass : BaseClass { ...
Использовать доступ к свойству вместо поля.
public class BaseClass {
...
public int A { get; set; }
public class ChildClassMap : ClassMap<ChildClass> {
...
Map(x => x.A)
.Access.Property()
;
Я предполагаю, что это является некоторой проблемой из-за отражения универсального типа (хотяесли это намеренное дизайнерское решение NHibernate, я бы хотел понять, почему).
В данный момент я просто отображаю как свойство (используя обходной путь # 2) - но есть ли способ, которым я могу отобразитьмой первый пример в свободно-nhibernate?