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; }
}
我正在做一个小项目,我有一个多层次的一对多模型。但出于某种原因,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; }
}