NHibernate で TPC 継承を使用したいさまざまなソースからの支払いオブジェクトのセットがあります。これらすべてのオブジェクトのベースは支払い処理業者です (したがって、すべてが一貫した形式を持っています) が、データベースには基本クラスの表現はありません。挿入しようとすると例外がスローされるという事実を除いて、マッピングはうまくいったと思います-「<エンティティ名>の<ユニオンサブクラス>マッピングでID列キー生成を使用できません」
クラス:
public class BasePayment
{
public virtual int Id { get; set; }
public virtual PaymentSource Source { get; set; }
public virtual DateTime Date { get; set; }
public virtual decimal Amount { get; set; }
}
public class SubPayment : BasePayment
{
}
マッピング:
public class BasePaymentMap : ClassMap<BasePayment>
{
public BasePaymentMap()
{
UseUnionSubclassForInheritanceMapping();
DiscriminateSubClassesOnColumn("Source");
Id(m => m.Id);
Map(m => m.Source);
Map(m => m.Amount);
Map(m => m.Date);
}
}
public class SubPaymentMap : SubclassMap<SubPayment>
{
public SubPaymentMap()
{
DiscriminatorValue(PaymentSource.SourceX);
Abstract();
Table("SourceXPayments");
}
}
そして、それは私が持っている限りです。SaveOrUpdate で上記のエラーが発生し、Google 検索はこれまで役に立たなかった - この質問を見つけた: Cannot use identity column key generation with <union-subclass> ( TABLE_PER_CLASS )問題をカバーしているように見えるJava/Hibernateでは、しかし、 Fluent NHibernateのメソッドにはテーブルがないように見えるため@GeneratedValue(strategy = GenerationType.TABLE)
、Fluent構文への変換に問題があります。GeneratedBy()
カバー。
それをもう少し読んでみると、これは不可能かもしれないので、誰かがこれを確認したり、状況の回避策を提供したりできるなら、それは大歓迎です.
十分な詳細を提供していない場合は、何がより役立つか教えてください。
前もって感謝します