モデル
LineItemを階層としてマップできます。
LineItem階層
public class LineItem
{
//common properties of LineItem
}
public class PurchaseLineItem : LineItem
{
public PurchaseOrder PurchaseOrder { get; set; }
}
public class InvoiceLineItem : LineItem
{
public Invoice Invoice { get; set; }
}
特定の子を参照するようにPurchaseOrderとInvoiceを変更します
注文書 :
public class PurchaseOrder
{
public IList<PurchaseLineItems> LineItems { get; set; }
}
請求書 :
public class Invoice
{
public IList<InvoiceLineItems> LineItems { get; set; }
}
データベース
データベース側では、2つのアイテムを異なるテーブルにマッピングすることを検討できますが、これにより結合が不必要に増加します。型判別子を使用して、階層全体に単一のテーブルを採用できます。
- 特定のクラスは、どちらのホルダーがnull許容であるかについてのコードの残りの部分での混乱を回避し、読みやすさを向上させるのに役立ちます。
LineItem
PurchaseOrder
Invoice
PurchaseOrder
にパラメーターとしてPurchaseLineItem
(同様Invoice
にのコンストラクターパラメーターとしてInvoiceLineItem
)追加して、これらのエンティティがそれぞれのホルダーなしで初期化されないようにすることで、設計を改善することもできます。