Свободное наследование NHibernate и для каждого подкласса

StackOverflow https://stackoverflow.com/questions/8820834

Вопрос

У меня есть базовый класс и два дочерних класса (A: Base и B: Base), и я хочу сопоставить их с двумя таблицами (таблица A и таблица B).Возможно ли это в Fluent NHibernate?Итак, у меня есть:

public class Base
{
    public virtual int Id {get;set;}
    public virtual int IndexIn {get;set;}
    public virtual Product Product {get;set;}
}

public class A : Base
{
    public virtual string Value {get;set;}
}

public class B : Base
{
    public virtual int Value {get;set;}
    public virtual IList<Sequence> Sequences {get;set;}
}

Мое отображение таково:

public class BaseMap : ClassMap<Base>
{
     public BaseMap()
     {
        Id(x => x.Id);
        Map(x => x.IndexIn);
        References(x => x.Product);
     }
}

public class AMap : SubclassMap<A>
{
     public AMap()
     {
         Map(x => x.Value);
     }
}
public class BMap : SubclassMap<B>
{
     public BMap()
     {
         Map(x => x.Value);
         HasMany(x => x.Sequences);
     }
}

Но в этом случае он создает три таблицы (A, B и Base).Это хорошо, но мне нужно уменьшить количество таблиц, поэтому я согласен иметь поля Base как в таблице A, так и В таблице B.Обычно я хочу просто сопоставить A и B как обычные классы (без использования наследования), но мне нужно иметь возможность добавить какой-нибудь другой класс, где у меня может быть свойство:

public virtual IList<Base> ListofAandB {get;set;}

Если я удалю определение базовой карты и просто сопоставлю A и B как ClassMap<> Я получаю сообщение об ошибке "Не удается найти определение карты для базы", если я пытаюсь использовать свойство, которое написано выше.

Это было полезно?

Решение

Вы не сможете отобразить свой ListOfAAndB свойство, если ваше наследование присутствует только в вашем коде, а не в вашей модели базы данных.Чтобы NHibernate отображал это свойство в том виде, в каком оно определено, вам понадобится Base таблица в вашей базе данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top