NHibernate JOIN сопоставление не удается, когда сопоставленное поле перемещается в базовый класс - PullRequest
0 голосов
/ 03 октября 2018

Имея два модельных класса со многими общими полями, я решил создать базовый класс и оба они наследовать от него.

Существующие классы моделей уже поставляются с классами карты.

Все общие поля, которые теперь наследуются в дочерних классах, являются виртуальными, чтобы NHibernate был доволен, и все они в порядке, кроме одного....

Это мой случай:

public class BaseClass : EntityBase<Guid>
{
   //This is not complaining 
   public virtual string Text { get; set; }

   //This is complaining
   public virtual Guid TouchGuid { get; set; }
}

public class A : BaseClass
{
    //inherited + specific stuff
}

public class B : BaseClass
{
    //inherited + specific stuff
}

Теперь это классы отображения:

public class AMap : ClassMapping<A>
{
    //Mapping the ID inherited from EntityBase class
    Id(x => x.Id, mapper =>
    {
        mapper.Generator(Generators.GuidComb);
        mapper.Column("Pk_MenuItemId");
    });

    //Mapping the common field inherited, doesn't complain !
    Property(x => x.Mnemonic);

    //This is the one which is complaining, keep in mind it was working
    //before creating the base class and move the TouchGuid property in it.
    Join("Touch", x =>
    {
        x.Key(k =>
        {
            k.Column("EntityId");
            k.ForeignKey("PK_AClassId");
            k.OnDelete(OnDeleteAction.Cascade);
            k.Unique(true);
        });
        x.Property(p => p.TouchGuid);
    });
}

public class BMap : ClassMapping<B>
{
    //Same map as for class A
}

Каждый раз, когда я запускаю программу, загружаю данные из этих классов(таблицы), потерпит неудачу, заявив, что не может найти столбец TouchGuid в таблице A и соответственно таблице B, вот ошибка:

enter image description here

Да, есть общие данные между таблицами A и B, но я не могу изменить схему БД, это добавило бы слишком много сложности.

Нужно ли мне также создавать таблицу для базового класса?Я хотел бы избежать создания новой таблицы, если это возможно.

Любые намеки на то, что может быть не так?

Спасибо!

1 Ответ

0 голосов
/ 04 октября 2018

Я полагаю, что NHibernate предполагает схему БД с несколькими таблицами, поскольку по умолчанию используется неявный режим полиморфизма.Попробуйте установить полиморфизм = явный в сопоставлениях.

...