0

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

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

这是我的代码示例:

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());
    }
}

如何正确映射?

4

1 回答 1

0

实体框架将假定任何从映射到数据库表的 POCO 类继承的类都需要一个鉴别器列,即使派生类不会保存到数据库中也是如此。

请参阅此处的解决方案EF Code First "Invalid column name 'Discriminator'" 但没有继承

于 2014-11-22T06:24:44.517 回答