实体框架TPH以及与Concrete Class的一对多关系

时间:2015-03-03 15:06:05

标签: c#-4.0 one-to-many tph

我一直在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列。我觉得我错过了一些明显的东西,或者我走了一条不稳定的实施路径。有人可以指出我的任何建议或读物都会很棒。谢谢!

0 个答案:

没有答案