Имея два модельных класса со многими общими полями, я решил создать базовый класс и оба они наследовать от него.
Существующие классы моделей уже поставляются с классами карты.
Все общие поля, которые теперь наследуются в дочерних классах, являются виртуальными, чтобы 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, вот ошибка:
Да, есть общие данные между таблицами A и B, но я не могу изменить схему БД, это добавило бы слишком много сложности.
Нужно ли мне также создавать таблицу для базового класса?Я хотел бы избежать создания новой таблицы, если это возможно.
Любые намеки на то, что может быть не так?
Спасибо!