2016-04-27 2 views

Antwort

0

Ich weiß nicht, ich habe Ihre Frage richtig oder nicht, aber es ist das Standardverhalten von ef. Im TPH-Mapping-Szenario werden alle Typen in einer Vererbungshierarchie einer einzelnen Tabelle zugeordnet. Eine Diskriminatorspalte wird verwendet, um den Typ jeder Zeile zu identifizieren. Wenn Sie Ihr Modell mit Code First erstellen, ist TPH die Standardstrategie für die Typen, die an der Vererbungshierarchie teilnehmen. und Sie dieses Verhalten mit Fluent Api

modelBuilder.Entity<Course>() 
.Map<Course>(m => m.Requires("Type").HasValue("Course")) 
.Map<OnsiteCourse>(m => m.Requires("Type").HasValue("OnsiteCourse")); 
+0

Nicht ganz das, was ich frage, ich verstehe, dass die Unterscheidungs ​​Spalte gibt es um zwischen den Klassen zu unterscheiden, die der einzelnen Tabelle zugeordnet sind. Was ich erwarten würde ist, dass diese Spalte indexiert wird, da ziemlich jede einzelne Abfrage für diese Tabelle die Diskriminatorspalte als Teil der where-Klausel verwendet. – RemarkLima

+0

möchten Sie den Diskriminatorwert selbst verwenden? Die Diskriminatorspalte wird intern von Code First verwendet und Sie können ihre Werte nicht vom Standpunkt der Vererbungszuordnung lesen/schreiben. –

+0

[Link] (http://weblogs.asp.net/manavi/inheritance-mapping-strategien-mit-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph) diesen Blog-Post ist sehr hilfreich, um das Konzept der Diskriminatorsäule zu verstehen. –

Verwandte Themen