Fluent/NHibernate の table-per-class 階層にマッピングの問題があります。データベースからレコードを取得すると、エラーが発生し続けます (間違った型の例外)。
ID 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 としてロードしようとしています。マッピングの問題ですか?