0

Ich habe folgende Einheiten in meinem Projekt (Kinder sind mehr als zwei):nur, Entity Framework mit

enter image description here

Gibt es eine Möglichkeit Datensätze aus übergeordneter Tabelle nur zu laden (ohne extra Joins), mit EF, wenn ich TPT Strategie für meine Vererbung verwendet?

nach folgenden Codes:

var result = ctx.Parents.Find(5); 
//or 
var result = ctx.Parents.OfType<Parent>().Find(5); 

EF erzeugt eine riesige SQL Abfrage! (in meinem realen Modell Ich habe mehr als 2 Kinder)

+0

Haben Sie müde 'var result = ctx.Parents.Find (5);' – CodeNotFound

+0

@CodeNotFound: ja, das Ergebnis hat nicht anders. – Masoud

+0

Vielleicht müssen Sie SQL View betrachten :) – CodeNotFound

Antwort

2

Ob Sie abfragen ctx.Parents oder ctx.Parents.OfType<Parent>(), fragen Sie immer EF alleParent Einheiten treffen eine Bedingung (Id == 5, in diesem Fall) zu erhalten. EF kann nicht im Voraus wissen, ob dies eine untergeordnete oder eine nicht-untergeordnete Parent Einheit ist (was möglich wäre, wenn Parent nicht abstrakt ist), so dass sie immer die vollständige Abfrage ausführen muss.

TPT ist kein sehr Abfrage-freundliches Modell. Ich würde es nicht benutzen (und Vererbung so weit wie möglich vermeiden).

+0

Welche Vererbung Strategie schlagen Sie vor, dass Abfrage-freundliche Modell ist? – Masoud

+0

Die beiden anderen, TPH und TPC, sind in dieser Hinsicht besser. –