私は保険契約を管理するために MVC5 Web サイトに取り組んできましたが、設計上の問題と思われるものに行き詰まっています。私は、ポリシーと呼ばれる次の抽象クラスを持つTPHエンティティの状況を最初にコードしています。
public abstract class Policy
{
public int PolicyID { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime Inception { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime Expiration { get; set; }
}
そして、次の 2 つの具象クラス:
public class UmbrellaPolicy : Policy
{
[Display(Name = "Umbrella:")]
public bool hasUmb { get; set; }
public virtual List<Umb> UmbCoverages { get; set; }
}
public class PackagePolicy : Policy
{
[Display(Name = "General Liability:")]
public bool hasGen { get; set; }
public virtual List<Gen> GenCoverages { get; set; }
[Display(Name = "Umbrella:")]
public bool hasUmb { get; set; }
public virtual List<Umb> UmbCoverages { get; set; }
}
そして最後に、上記の両方の具体的なクラスと 1 対多の関係を持つクラス:
public class Umb
{
public int UmbID { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
[Display(Name = "Coverage Effective")]
public DateTime DateAdded { get; set; }
[Display(Name = "Each Occurrence Limit")]
public decimal OccurrenceLimit { get; set; }
[Display(Name = "Each Occurrence Retention")]
public decimal OccurrenceRetention { get; set; }
[Display(Name = "Aggregate Limit")]
public decimal AggregateLimit { get; set; }
public virtual Policy Policy { get; set; }
}
ビジネス要件は、顧客が傘の補償を希望する場合、傘の補償のみが必要な場合は傘の保険を購入するか、傘の補償と賠償責任の補償が必要な場合はパッケージの保険を購入することです (住宅所有者と自動車の保険をバンドルすることを望むコマーシャルなど)。顧客がどれだけの保険に加入しているかを表すクラス (クラス Umb) は、顧客が傘型保険を単独の保険またはパッケージで購入したかどうかに関係なく同じです。
新しい Umb を作成してポリシー (アンブレラまたはパッケージ) を仮想ポリシー プロパティに追加し、具体的なポリシー クラスのリストから Umb オブジェクトのリストを表示しようとすると、何も表示されません。
データベースを調べたところ、データベースの移行を行ったときに、UmbrellaPolicy_PolicyID、PackagePolicy_PolicyID、および Policy_PolicyID の 3 つの主要な列があることがわかりました。正しいポリシー ID が Policy_PolicyID 列に正常に追加されますが、エンティティ フレームワークは、使用している具象クラス (厳密に型指定されたビュー) に応じて、Umbrella または Package 列を参照していると思います。明らかな何かが欠けているか、不安定な実装パスをたどったように感じます。誰かが私に指摘できる提案や読み物は素晴らしいでしょう. ありがとう!