У меня проблема с отображением иерархии таблиц в классе в Fluent / NHibernate. При извлечении записей из базы данных я получаю сообщение об ошибке (исключение неправильного типа)
Объект с идентификатором: 2445763 не принадлежал указанному подклассу: ClassA (загружаемый объект был неправильного класса [ClassB]) (запись 2445763 имеет значение «2» в столбце Тип)
В моем домене есть EntryBase, ClassA и ClassB. Классы определены как
public abstract class EntryBase
{
public virtual int Id {get;set;}
public virtual string CommonProperty1 {get;set;}
*... (lots of other common properties)*
public virtual string CommonPropertyN {get;set;}
}
public class ClassA : EntryBase
{
public virutal string ClassAOnlyProperty {get;set;}
}
public class ClassB : EntryBase
{
public virutal string ClassBOnlyProperty {get;set;}
public virutal int ClassBOnlyOtherProperty {get;set;}
}
Отображения:
public class EntryBaseMap : ClassMap<EntryBase>
{
public EntryBaseMap()
{
Table("MySingleTable");
Id(x => x.Id, "RecordId").GeneratedBy.Identity();
Map(x => x.CommonProperty1, "Field1Name");
...
Map(x => x.CommonPropertyN, "FieldNName");
DiscriminateSubClassesOnColumn<string>("Type");
}
}
public class ClassAMap : SubclassMap<ClassA>
{
public ClassAMap()
{
DiscriminatorValue("1");
Map(x => x.ClassAOnlyProperty);
}
}
public class ClassBMap : SubclassMap<ClassB>
{
public ClassBMap()
{
DiscriminatorValue("2");
Map(x => x.ClassBOnlyProperty);
Map(x => x.ClassBOnlyOtherProperty);
}
}
Есть идеи, что может быть не так? Я правильно смог сохранить записи класса B, но когда я их получаю, он пытается загрузить их как класс A. Это проблема сопоставления?