2016-08-02 5 views
0

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.

+0

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. –

Antwort

0

Scheinbar wird dies nicht unterstützt, auch nicht ab EF 6.1. Ich fand das folgende Workitem auf Codeplex:

https://entityframework.codeplex.com/workitem/2332

Hier ist ein Link zu einem Artikel ist eine Abhilfe durch Mischen von Dapper ORM mit Entity Framework zu erklären. Laut dem Autor steigt die Leistung dramatisch.

http://blog.falafel.com/how-to-improve-the-performance-of-tpt-inheritance-mapping-in-entity-framework/

Hier ist eine Diskussion über Github Seite EF in Bezug auf EF-7-Version 1.0, die TPT insgesamt tatsächlich weggelassen, aber sie sagen, sie werden TPT schließlich den Artikel I Mager zurück in 7 EF setzen gerade, aber es ist nicht Stellen Sie fest, ob sie das Leistungsproblem mit TPT beheben, wenn sie zu EF 7 hinzugefügt werden oder ob es genauso funktioniert wie in Version 6.1.

Ich werde entweder Dapper ORM verwenden oder einen anderen Ansatz zur Modellierung meiner Daten finden.

Verwandte Themen