我一直在 MVC5 网站上工作以管理保险单,并被我认为是设计问题所困扰。我首先有一个代码,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; }
}
和两个具体的类如下:
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; }
}
并且,最后一个类与上述两个具体类具有一对多关系:
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 并将策略(无论是保护伞还是包)添加到虚拟 Policy 属性,然后尝试从具体策略类的列表中查看 Umb 对象列表时,没有显示。
查看数据库后,当我进行数据库迁移时,似乎有三个关键列:UmbrellaPolicy_PolicyID、PackagePolicy_PolicyID 和 Policy_PolicyID。它成功地将正确的策略 ID 添加到 Policy_PolicyID 列,但我猜实体框架会根据我正在使用的具体类(即在强类型视图中)查看 Umbrella 或 Package 列。我觉得我遗漏了一些明显的东西,或者我走上了一条摇摇欲坠的实现道路。有人可以指出我的任何建议或读物都会很棒。谢谢!