2014-02-26 38 views
1

我使用EF 6和具有的一部分,的DbContext包含實體類型EntityBase不是以下</p> <pre><code>public class Title : EntityBase { public short Id { get; set; } public string TitleName { get; private set; } } public abstract class EntityBase { public DateTime CreatedDate { get; set; } } </code></pre> <p>型號爲當前上下文

public DbSet<Title> Titles { get; set; } 

modelBuilder.Entity<Title>().Map(m => 
     { 
      m.MapInheritedProperties(); 
      m.ToTable("Titles"); 
     }); 

但試圖訪問標題時,我得到「實體類型EntityBase不是當前小組模型的一部分XT「。在NuGet控制檯中運行Update-Database之後,我發現表格'標題'是根據預期在所有字段(id,titlename,createddate)的數據庫中創建的。如果可能,我不想在DbContext中添加EntityBase db集。請幫助我找到解決方案。

回答

2

MapInheritedProperties用於建模每個具體類型(TPC)映射,每個類的完整表。你可以做到這一點,但是你也必須配置基類。

modelBuilder.Entity<EntityBase>(); 

但是,我寧願刪除MapInheritedProperties聲明並分別映射每個類。如果映射TPC映射,則永遠無法映射其他類型模型之間的其他繼承關聯。

+0

謝謝,但如果我包括EntityBase,我需要定義我不想在基類中做的關鍵字段。即使我將Id字段移動到EntityBase並嘗試更新數據庫,它也會拋出「類型'標題'無法按照定義進行映射,因爲它將繼承的屬性映射到使用實體分割或其他形式的繼承的類型中。可以選擇不同的繼承映射策略以便不映射繼承的屬性,或者更改層次結構中的所有類型以映射繼承的屬性並不使用分割。「 – Aryan

+0

我也嘗試刪除EntityBase中的抽象修飾符,但沒有幫助。我的要求是在一些TPC,但大多數是從EntityBase繼承的TPT。這不可能嗎? – Aryan

+0

按照我的建議刪除'MapInheritedProperties'語句是什麼?您的類可以從其他類繼承,但EF不需要知道這一點。 –

相關問題