1

Ich möchte Discriminator Spalte von Data Annotation erstellen.Create Entity Framework TPH Discriminator Spalte von Data Annotation

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

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

    public int? page { get; set; } 

} 

Mapping von Fluent

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

Auf jeden Fall muss ich Scheider Spaltenwert in ausgewählten Ergebnis

Antwort

0

Ich mag Diskriminator Spalte von Data Annotation würde haben, erstellen.

Sie können keine Eigenschaft notieren, die nicht vorhanden ist.

Mit TPH-Vererbung ist die Diskriminatoreigenschaft nicht Teil des Klassenmodells. Dies liegt daran, dass das Setzen eines Wertes auf den Wert eines anderen Typs eine Ambiguität erzeugen würde: Typ A, markiert als Typ B. So verhindert EF nur, dass Entwickler das nicht tun.

Also: Zuordnung TPH Vererbung kann nur durch fließende Zuordnung erfolgen.

Auf jeden Fall muss ich Scheider Spaltenwert in ausgewählten Ergebnis

haben Wenn Sie den Diskriminatorwert in Code benötigen, dies in der Regel ein verräterisches ist, dass Sie entweder keine Anwendung Vererbung, wie es sollte, oder Sie sollten die Vererbung überhaupt nicht verwenden. Ein Indikator für die Verwendung der Vererbung ist, wenn es Fälle gibt, in denen der "Typ" von Objekten zur Laufzeit geändert werden sollte (d. H. Der Wert des Diskriminators wird geändert).

+0

Wie kann ich den Diskriminatoreigenschaftswert im Ergebnis sehen? d. h. 'context.Books.Find (2)' – Hamid

+0

Wie gesagt, du kannst nicht. Es ist keine exponierte Eigenschaft. Wenn Vererbung gut verwendet wird, müssen Sie nicht wissen, mit welchem ​​Subtyp Sie es zu tun haben. Das ist der Punkt des Polymorphismus. Wenn Sie den Typ zur Laufzeit kennen müssen, ist mein Ratschlag, keine Vererbung zu verwenden, sondern eine type -Eigenschaft zu verwenden und nach ihrem Wert zu handeln. Aber diese Diskussion geht über Ihre Frage hinaus. –

+0

BTW, können Sie eine Sammlung von Subtypen durch 'context.Books.OfType ()' erhalten. –

Verwandte Themen