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