ASP MVC5 中的多级一对多

Multi-Level One to Many in ASP MVC5

我正在做一个小项目,我有一个多层次的一对多模型。但出于某种原因,EF 似乎不理解这种关系,当我使用 EF 创建 MVC 控制器时收到错误。

这是我的模型类:

public class BusinessDomain
{
    [Key]
    public int BusinessDomainID { get; set; }
    [Display(Name = "Business Domain Name")]
    public string DomainName { get; set; }
    [Display(Name = "Domain Manager Name")]
    public string DomainManager { get; set; }

    public virtual ICollection<BusinessProcess> BusinessProcesses { get; set; }

}

 public class BusinessProcess
{ 
    public int BusinessProcessID { get; set; }
    [Display(Name = "Business Processs Name")]
    public string ProcessName { get; set; }
    [Display(Name = "Business Process Owner Name")]
    public string ProcessOwner { get; set; }

    public virtual ICollection<BusinessSubProcess> BusinessSubProcesses { get; set; }

    public int BusinessDomainID { get; set; }
    public virtual BusinessDomain BusinessDomain { get; set; }
}



 public class BusinessSubProcess
{
    public int BusinessSubProcessId { get; set; }
    public string SubProcessName { get; set; }
    public string SubProcessOwnerName { get; set; }

    public int BusinessProcessID { get; set; }
    public virtual BusinessProcess BusinessProcess { get; set; }
}

当我创建一个 EF 控制器时,出现以下错误:Dependent role 指的是关键属性,Dependent role 的重数上限必须是 1。

如果我只保留两个模型(BusinessLine 和 BusinessProcess),它似乎可以工作。我开始怀疑 ASP MVC 不支持一对多模型的多级吗?

请告诉我我做错了什么?

提前致谢!

我看到的唯一区别是您没有在 BusinessProcess class 中包含对 BusinessLine 对象的引用。您应该包括它并将其标记为外键。

此外,您将 BusinessSubprocessID 标记为 BusinessProcess 的外键,我认为这是一个错误,因为您在 class 中也持有 BusinessProcessID。

附带说明一下,您是否需要子流程中的 BusinessLineID class,因为您可以通过其父流程轻松访问它?

   public class BusinessLine
{
    [Key]
    public int BusinessLineID { get; set; }
    [Display(Name = "Business Domain Name")]
    public string DomainName { get; set; }
    [Display(Name = "Domain Manager Name")]
    public string DomainManager { get; set; }

    public virtual ICollection<BusinessProcess> BusinessProcesses { get; set; }

}

   public class BusinessProcess
{ 
    [Key]
    public int BusinessProcessID { get; set; }
    [Display(Name = "Business Processs Name")]
    public string ProcessName { get; set; }
    [Display(Name = "Business Process Owner Name")]
    public string ProcessOwner { get; set; }


    public virtual ICollection<BusinessSubProcess> BusinessSubProcesses { get; set; }

    public int BusinessLineID { get; set; }
    [ForeignKey("BusinessLineID")]
    public virtual BusinessLine BusinessLine { get; set; }
}

    public class BusinessSubProcess
{
    [Key]
    public int BusinessSubProcessId { get; set; }
    public string SubProcessName { get; set; }
    public string SubProcessOwnerName { get; set; }
    public DateTime Created { get; set; }
    public DateTime LastChange { get; set; }

    public int BusinessProcessID { get; set; }
    [ForeignKey("BusinessProcessID")]
    public virtual BusinessProcess BusinessProcess { get; set; }
}