实体框架 - 具有空数据库字段的TPH继承

时间:2014-11-22 06:00:35

标签: entity-framework inheritance tph

我有2个继承自同一基类的子类。它们都映射回同一个表。如果db表中的field1为null且field2不为null,则它是一个子类。如果field1不为null且字段2为null,则它是另一个子类。

我一直收到错误。实际的消息是:“无效的列名'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());
    }
}

如何正确映射?

1 个答案:

答案 0 :(得分:0)

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

请在此处查看解决方案EF Code First "Invalid column name 'Discriminator'" but no inheritance