inheritanceEF代码优先

我有一个基础对象,我不想在数据库中作为一个实体映射,我只希望将属性添加到在数据库中映射的对象:

没有映射的对象(不知道它是否重要但是baseobject在另一个程序集中):

public class BaseObject { public virtual string Prop1 { get; set; } public virtual string Prop2 { get; set; } } 

映射对象:

 public class ChildObject : BaseObject { public virtual string Prop3 { get; set; } public virtual string Prop4 { get; set; } public virtual string Prop5 { get; set; } } 

什么在DbContext中注册

  public DbSet ChildObjects { get; set; } 

我想在Db看到什么

 table:ChildObject col:Prop1 (from BaseObject) col:Prop2 (from BaseObject) col:Prop3 col:Prop4 col:Prop5 

要恢复,我想要做的是在Db中有一个具有子项和基本属性的表。

这是我目前得到的错误:

未映射类型“namespace.ChildObject”。 使用Ignore方法或NotMappedAttribute数据批注检查未明确排除类型。 validation类型是否已定义为类,不是原始类,嵌套类还是通用类,并且不从EntityObjectinheritance。

我一直在挖,但找不到怎么做。

有任何想法吗?

编辑:

@Kyle Trauberman是正确的,但由于某种原因,从不同程序集中的基类inheritance似乎存在问题。 我只是这样做了。

 class BaseObjectClone : BaseObject { } /* BaseObject being in another assembly */ public class ChildObject : BaseObjectClone { public virtual string Prop3 { get; set; } public virtual string Prop4 { get; set; } public virtual string Prop5 { get; set; } } 

Morteza Manavi有一篇博文,详细介绍了如何做到这一点:

http://weblogs.asp.net/manavi/archive/2011/01/03/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-3-table-per-concrete-type- TPC-和选择策略,guidelines.aspx

基本上,您需要在OnModelCreating中重写OnModelCreating并为每个子表调用MapInheritedProperties()

 protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity().Map(m => { m.MapInheritedProperties(); m.ToTable("BankAccounts"); }); modelBuilder.Entity().Map(m => { m.MapInheritedProperties(); m.ToTable("CreditCards"); }); }