我有一個抽象基類,用於我定義的幾個實體。其中一個派生實體實際上是另一個實體的非抽象基類。EF代碼優先配置中的多級繼承
下面這段代碼:
public abstract class BaseReportEntry {
public int ReportEntryId { get; set;}
public int ReportBundleId { get; set; } //FK
public virtual ReportBundle ReportBunde { get; set; }
}
//A few different simple pocos like this one
public PerformanceReportEntry : BaseReportEntry {
public int PerformanceAbsolute { get; set; }
public double PerformanceRelative { get; set; }
}
//And one with a second level of inheritance
public ByPeriodPerformanceReportEntry : PerformanceReportEntry {
public string Period { get; set; }
}
我使用的是基礎EntityTypeConfiguration
:
public class BaseReportEntryMap<TReportEntry> : EntityTypeConfiguration<TReportEntry>
where TReportEntry : BaseReportEntry
{
public BaseReportEntryMap()
{
this.HasKey(e => e.ReportEntryId);
this.HasRequired(e => e.ReportsBundle)
.WithMany()
.HasForeignKey(e => e.ReportsBundleId);
}
}
想必這工作得很好繼承的一個層次,但引發以下錯誤的一個案例它有第二級別:
The foreign key component 'ReportsBundleId' is not a declared property on type 'ByPeriodPerformanceReportEntry'
public class ByPeriodPerformanceReportEntryMap : BaseReportEntryMap<ByPeriodPerformanceReportEntry>
{
public ByPeriodPerformanceReportEntryMap()
: base()
{
this.Property(e => e.Period).IsRequired();
this.Map(m =>
{
m.MapInheritedProperties();
m.ToTable("ByPeriodPerformanceReportEntries");
});
}
}
Here's ReportB ReportB如果需要的話
public class ReportsBundle
{
public int ReportsBundleId { get; set; }
public virtual ICollection<PerformanceReportEntry> PerformanceReportEntries{ get; set; }
public virtual ICollection<ByPeriodPerformanceReportEntry> ByPeriodPerformanceReportEntries{ get; set; }
}
感謝您的回覆,並對缺乏清晰度感到抱歉。基本上,我正在模擬一個外部報告系統,它具有這兩個獨立的報告。我打算使用ByPeriodPerformanceReportEntry和PerformanceReportEntry作爲單獨的具體實體,它們基本上只有公共屬性(PerformanceAbsolute,PerformanceAbsolute等等)。您認爲您可以使用這些新信息更新您的代碼嗎?謝謝你的幫助 – parliament 2013-03-25 01:17:24
我想你的意思是讓PerformanceReportEntry抽象,併爲具體實現創建第三個類,如「ConsolidatedPerformanceReportEntry」。這會工作嗎?這是最好的選擇嗎? – parliament 2013-03-25 01:19:05
@Vazgen:我在我的答案中添加了編輯部分。 – Slauma 2013-03-25 18:01:55