我有一個EF數據模型,它表示具有報告部分的分層樹的報告。每個ReportSection實體都包含一個零個或多個子ReportSection的集合。每個Report實體都包含一個ReportSection實體,用作ReportSections的樹的根。具有下列導航屬性EF代碼優先可選1對1關係
我的數據模型:
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實體的主鍵的外鍵我的報告實體。但是,在我的場景中,只有ReportSection實體的分層樹中的頂級ReportSection參與與Report實體的關係。 ReportSection實體的其餘部分相互關聯,其主鍵獨立於任何報表主鍵。
有沒有辦法讓這個工作?具體來說,Report實體是否有辦法「包含」頂級ReportSection實體,哪個ReportSection實體具有自己的自引用ReportSection實體的集合?