Ich baue einen Einstellungsprozess mit EF Code First Version 6.0. Ich habe die folgende (gekürzte) Vererbungshierarchie bekommt, die implementiert ist unter Verwendung von Tabelle-per-Typ:Entity Framework Version 6.0 Tabellen-pro-Typ-Hierarchieabfragen rufen Felder von abgeleiteten Typen ab
[Table("Person")]
public class Person
{
[Key]
public int PersonId { get; set; }
[StringLength(30)]
public string FirstName { get; set; }
[StringLength(30)]
public string MiddleName { get; set; }
[StringLength(30)]
public string LastName { get; set; }
}
[Table("Applicants")]
public class Applicant : Person
{
//Various Applicant properties
[StringLength(256)]
public string UserName { get; set; }
}
[Table("Employees")]
public class Employee : Applicant
{
public DateTime HireDate { get; set; }
[StringLength(20)]
public string WorkPhone { get; set; }
[StringLength(30)]
public string JobTitle { get; set; }
//Various other Employee Properties
}
Jedes Mal, wenn ich die folgende Abfrage in LINQPad ausführen:
Applicants.Where(x => x.UserName == "johndoe999")
die Abfragefelder gibt, die mit die abgeleitete Klasse Employee (HireDate, WorkPhone, JobTitle), die ich nicht erwartet habe. Ich würde natürlich wollen, dass "Mitarbeiter" bezogene Felder weglassen, wenn alles, was ich verlange, Bewerber sind. Dies passiert nicht, wenn ich dieselbe Hierarchie wie eine Tabelle pro Hierarchie implementiere. Es sollte mir das gleiche Verhalten bei Table-per-Type geben, oder? Gibt es noch etwas, das ich tun muss, um dieses Verhalten zu aktivieren?
Ich habe einige Hinweise auf dieses Problem wie (Entity Framework Table Per Type Performance) gesehen, aber das ist von '11 in Bezug auf eine viel ältere Version von EF.
Wenn Sie "Bewerber" bekommen, müssen Sie * unbedingt * auch "Mitarbeiter" erhalten. Jede Komponente, die Typeigenschaften widerspiegelt, zeigt die Eigenschaften 'Mitarbeiter' an. Ich kann mir nicht vorstellen, dass das bei TPH nicht passiert ist, es sei denn, man hatte die Typen nebeneinander geerbt. –