我有一个 EF 数据模型,它表示具有报告部分的层次结构树的报告。每个 ReportSection 实体包含零个或多个子 ReportSection 的集合。每个 Report 实体包含一个 ReportSection 实体,用作 ReportSection 树的根。
我的数据模型具有以下导航属性:
public class Report
{
// Primary key
public int Id { get; set; }
// A Report has one root ReportSection
[ForeignKey("RootReportSection")]
public int ReportSectionId { get; set; }
public virtual ReportSection RootReportSection { get; set; }
}
public class ReportSection
{
// Primary key
public int Id { get; set; }
// Optional self-reference to the parent ReportSection
[ForeignKey("ParentReportSection")]
public int? ParentReportSectionId { get; set; }
public virtual ReportSection ParentReportSection { get; set; }
// Optional foreign key to the parent Report
[ForeignKey("ParentReport")]
public int? ReportId { get; set; }
public virtual Report ParentReport { get; set; }
// Child ReportSections contained in this ReportSection
public virtual ICollection<ReportSection> ReportSections { get; set; }
}
如果我从报告实体中省略ReportSectionId
和RootReportSection
导航拍手,一切正常。但是,如上所述,尝试添加迁移会出错:
Because the Dependent Role properties are not the key properties,
the upper bound of the multiplicity of the Dependent Role must be '*'.
经过一番挖掘,我现在明白 EF 显然希望我使用 ReportSections 实体的主键作为我的 Report 实体的外键。但是,在我的场景中,只有 ReportSection 实体的层次结构树中的顶级 ReportSection 参与与 Report 实体的关系。其余的 ReportSection 实体相互关联,它们的主键独立于任何 Report 主键。
有没有办法让它工作?具体来说,有没有办法让 Report 实体“包含”顶级 ReportSection 实体,哪个 ReportSection 实体有自己的自引用 ReportSection 实体集合?