0
我一直在使用joinedsubclass繼承映射一段時間,並決定切換到每班的表,因爲它允許更有效的子類型的歧視。但是,在進行更改時,我現在得到以下例外。流利Nhibernate WrongClassException與多態父
Object with id: 1 was not of the specified subclass: MyModel.FooBase (Discriminator was: '2')
摘要類如下。
public abstract FooBase
{
/* snip other properties */
public virtual string Name { get;set; }
public virtual IList<Child> Children { get; set; }
}
public class Bar : FooBase
{
public virtual string NickName { get;set; }
}
public class Child
{
public virtual FooBase Parent { get;set; }
}
而且映射
public sealed class ChildMap : ClassMap<Child>
{
public ChildMap()
{
/*snip*/
References(x => x.Parent).ColumnName("ParentId");
}
}
public sealed class FooBaseMap : ClassMap<FooBase>
{
public FooBaseMap()
{
/*snip*/
HasMany(x => x. Children)
.AsBag().Cascade
.AllDeleteOrphan()
.KeyColumnNames.Add("ParentId")
.Inverse();
DiscriminateSubClassesOnColumn<int>("FooType")
.SubClass<Bar>(Types.Bar, m => m.Map(x => x.NickName))
}
}
事實證明這個異常通常被認爲是多態的集合不指定其中的屬性。這裏不是這種情況。我曾經玩過讓FooBase不抽象,這沒有什麼區別。沒有想過改變映射策略會導致任何問題,除了必須在子類上有可爲空的列之外。
令人困惑的是我沒有指定一個子類,因爲這是一個多態的父親,我只是試圖在這種情況下訪問基本屬性Name。
非常感謝,