1

Data AnnotationでDiscriminator列を作成します。流暢Data AnnotationでEntity Framework TPH Discriminator列を作成

modelBuilder.Entity<Book>() 
      .Map<StoryBook>(m => m.Requires("typetitle").HasValue("story")); 

によって

[Table("Book")] 
public partial class Book 
{ 
    public long BookID { get; set; } 

    [StringLength(100)] 
    public string name { get; set; } 

    public int? page { get; set; } 

} 

マッピングとにかく私は、データ注釈によって識別カラムを作成したいと考えて選択結果に

答えて

0

を識別カラム値を持っている必要があります。

存在しないプロパティには注釈を付けることはできません。

TPH継承では、discriminatorプロパティはクラスモデルの一部ではありません。これは、その値を別の型の値に設定すると、タイプAとタイプBのマークがあいまいになるからです。

So:マッピングTPH継承は、流暢マッピングによってのみ行うことができます。

はとにかく私は、これは通常、あなたのどちらかが相続それが必要な方法を適用していない証拠である、あなたはコードで識別値が必要な場合は、選択結果

に識別子列の値を持っている必要があります継承をまったく使用すべきではありません。継承を使用することに対する1つの指標は、オブジェクトの「型」が実行時に変更される(すなわち、弁別子の値が変更される)場合がある場合である。

+0

resultのdiscriminatorプロパティの値はどのようにして確認できますか? 'context.Books.Find(2)' – Hamid

+0

私が言ったように、あなたはできません。それは公開されたプロパティではありません。継承がうまく使用されると、あなたはどのサブタイプを扱っているのかを知る必要はありません。それが多形性のポイントです。実行時に型を知る必要がある場合、私のアドバイスは継承を使用するのではなく、型のプロパティを使用してその値に基づいて行動することです。しかし、この議論はあなたの質問の範囲を超えています。 –

+0

ところで、 'context.Books.OfType ()'でサブタイプのコレクションを得ることができます。 –

関連する問題