实体框架 - 无数据库字段的TPH继承

问题描述:

我有2个继承自相同基类的子类。他们都映射回同一张桌子。如果db表中的field1为空,且field2不为空,则它是一个子类。如果field1不为null,并且字段2为空,则它是另一个子类。实体框架 - 无数据库字段的TPH继承

我不断收到错误。实际的消息是:“无效的列名'Discriminator'。”它实际上是说Discriminator ...我没有把它作为一个通用术语。

这里是我的代码示例:

DatabaseTableA 
TableAId (PK , int) 
FooId (FK , int , null) 
BarId (FK , int , null) 
Prop1 (int) 
Prop2 (int) 
Prop3 (int) 


public abstract class BaseClass 
{ 
    public int Prop1{ get; set; } 
    public int Prop2{ get; set; } 
    public int Prop3{ get; set; } 
} 

public class Foo : BaseClass 
{ 
    public int FooId{get;set;} 
} 

public class Bar : BaseClass 
{ 
    public int BarId{get;set;} 
} 

internal class BaseClassMap : EntityTypeConfiguration<BaseClass> 
{ 
    public BaseClassMap() 
    { 
     ToTable("DatabaseTableA"); 
     HasKey(e => e.TableAId); 

     Map<Foo>(m => m.Requires("BarId").IsDBNull()); 
     Map<Bar>(m => m.Requires("FooId").IsDBNull()); 
    } 
} 

如何映射这是否正确?

实体框架将假定任何从映射到数据库表上的POCO类继承的类都需要Discriminator列,即使派生类不会保存到数据库中。

见这里的解决方案EF Code First "Invalid column name 'Discriminator'" but no inheritance

+0

我之前读了解决方案。我不明白这是如何解决我的问题的,所有列都在子类中说明。 – Chris 2014-11-23 22:18:16