0

同じ基本クラスから継承する 2 つのサブクラスがあります。それらはすべて同じテーブルにマップされます。db テーブルの field1 が null で、field2 が null でない場合、それは 1 つのサブクラスです。field1 が null ではなく、field 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());
    }
}

これを正しくマッピングするにはどうすればよいですか?

4

1 に答える 1

0

Entity Framework は、派生クラスが DB に保存されない場合でも、データベース上のテーブルにマップされる POCO クラスから継承するクラスには Discriminator 列が必要であると想定します。

ここで解決策を参照してくださいEF Code First "Invalid column name 'Discriminator'" but no inheritance

于 2014-11-22T06:24:44.517 に答える