Während die Antwort richtig ist, gibt es eine weitere Option
Ihre ursprüngliche Abfrage
var item = context.Items.FirstOrDefault();// Database query will be run for this
var start = item.Promotions.FirstOrDefault().Start; // Another query will be run for this
var end = item.Promotions.FirstOrDefault().End; //Will another query be run again? Same query is run again for this
var price = item.Promotions.FirstOrDefault().Price; //Here also
Laden Artikel zu betrachten als Objekt stoppt Daten aus dem Objekt zu lesen
var item = context.Items.FirstOrDefault();// Database query will be run for
Nun sind alle Objekte geladen werden im Speicher gehalten, um von zu lesen, ohne eine Abfrage zu erzeugen
item.Description
item.Items //etc
nun Daten zu erhalten, wenn Sie verzögertes Laden sind, ist var Förderung = item.Promotions.FirstOrDefault() Und das wird eine weitere Abfrage
promotion.Start
promotion.End
Die Frage produzieren, wenn Sie die Förderung jedes Mal lesen, wäre es besser sein, um es mit der Abfrage enthalten (eifrig Laden verwenden) so, wenn das das Objekt geholt wird, ist es, das Kind Objekt
var item = context.Items.Include(x=>x.Promotions).FirstOrDefault();
und lädt dann wird es nur eine Abfrage dB-Daten über das Produkt zu erhalten und Th e Förderung.
Spezifische Auswahl
Sie auch die Abfrage aktualisieren können nur die Elemente auszuwählen, die Sie interessieren, indem Sie:
var customObj = context.Promotions.Where(p=>p.ItemId==itemId).Select(x=>new{x.Start, x.End, x.Price}).FirstOrDefault();
Und auf diese Weise erhalten Sie die spezifischen Auswahl erhalten und es werden spezifische Abfrage generieren für dich.
Hinweis Verwendung von SQL Profiler/Ameisen Profiler etc, um zu sehen, welche SQL-Sie generieren.
Also ich wie dieses context.Items.Include abrufen (x => x.Promotions). Dann erhalte ich einen Gegenstand wie diesen var item = items.FirstOrDefault(). Wenn U auf item.Promotions.FirstOrDefault() zugreift, wird die Abfrage erneut ausgeführt? –
Nein, es wird standardmäßig alle Instanzen enthalten, die mit dem Element – cpoDesign
verknüpft sind. Was ist, wenn eine Beziehung besteht? Beispiel var item = context.items.FirstOrDefault(); var start = item.Promotion.Start; var end = item.Promotion.End. Wie Sie sehen können, habe ich sie nicht im Cache einer Variablen zugewiesen. Also eine weitere Abfrage erneut ausgeführt, wenn ich Promotion Enddatum abrufe? –