0
create table Test_Table
(
   ID int primary key identity,
   C1 nvarchar(100) NULL
)

Test_Tableエンティティにマップされ、エンティティTest_1の親ですTest_2

ディスクリミネーター列に null 値があるかどうかに応じてC1、DB レコードが typeTest_1のエンティティまたは type のエンティティとして実体化される TPH 継承を実装することは可能Test_2ですか?

これを機能させるには、識別列Test_1を条件に設定し[C1] Is Not NullTest_2識別列を条件に設定する必要があります[C1] is null。ただし、問題は、条件によって列をプロパティにIs Not Nullマップする必要があるのに、プロパティにマップすることは許可されていないことです。C1Is NullC1

では、条件付きマッピングのみを使用してそのような条件を実装することは可能ですか?

ありがとうございました

4

1 に答える 1

0

表題のように、親クラスが null 値に関連付けられ、子クラスが null 以外の (必須の) 値に関連付けられている限り、これは可能です。

コードファーストの流暢なマッピング:

public class Test_1
{
    public int ID { get; private set; }
}

public class Test_2
{
    public string C1 { get; set; }
}

protected override void OnModelCreating(DbModelBuilder dbm)
{
    dbm.Entity<Test_1>()
        .Map<Test_2>(m => m.Requires(t => t.C1).HasValue());
}

ただし、親が値を必要とし、子が必要としない逆の場合は不可能です。これは、少なくとも部分的には、継承の「is-a」関係を壊すためです。矛盾した定義がある場合、具体的には、親が必要とするフィールドの値を除外する場合、Test_2を Test_1する方法があります。 ?

于 2017-01-04T20:07:38.297 に答える