我一直在MVC5网站上工作来管理保险政策,我坚持认为是设计问题。我首先有一个代码,TPH实体情况与下面的抽象类叫做policy:
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列。我觉得我错过了一些明显的东西,或者我走了一条不稳定的实施路径。有人可以指出我的任何建议或读物都会很棒。谢谢!