0

それは質問ではなく、将来のためだけです... (理解するのに多くの時間を費やしました)

public class A
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Type { get; set; }
}

public class B : A
{
    public string Lastname { get; set; }
}

マッピング (Fluent NHibernate):

public class AMap : ClassMap<A>
{
    Table("a");
    Id(x => x.Id).GeneratedBy.Native();
    Map(x => x.Name);
    Map(x => x.Type);

    DiscriminateSubClassesOnColumn<string>("Type")
            .AlwaysSelectWithValue();
}

public class BMap : ClassMap<B>
{
   DiscriminatorValue("BType");
   Extends<A>();
   Map(x => x.Lastname);
}

BMap オブジェクトを永続化すると例外が発生します:

例外:

Error dehydrating property value for A.Lastname

内部例外:

Invalid index 1 for this SqlParameterCollection with Count=1

この明白でない例外は、マッピングの設定ミスが発生したことを示しています。実際、「選択」クエリはかなりうまく機能します。ただし、「に挿入」(ISession.SaveOrUpdate) すると、前述のエラーが発生します。

修理:

AMap クラスでは、その行は必要ありません:

Map(x => x.Type);

この永続化を削除した後、正常に動作します

4

1 に答える 1