Ich habe etwas Code geerbt und meine aktuelle Aufgabe ist es, die Leistung zu verbessern. Sofort habe ich eine foreach-Schleife bemerkt, die faule Ladungen von Kindelementen enthält. Ich versuche, die faulen Lasten zu entfernen, da im Beispiel unten 1 + (3 * n) Aufrufe an die Datenbank gehen werden!Untergeordnete Entitäten einbeziehen, wenn ein Sproc mit Entity Framework V1 ausgeführt wird
using (BaseEntityConnection BaseEntityContext = new BaseEntityConnection()) {
List<Parents> entities = BaseEntityContext.CallASproc(storeOrgLevelId, startDate, endDate).ToList<Parents>();
foreach (Parents entity in entities)
{
entity.Child1Reference.Load();
entity.Child2Reference.Load();
entity.Child3Reference.Load();
}
}
Meine ersten Gedanken wandte sich mit .INCLUDE(), aber ich sehe nicht, wie das möglich ist, wenn ich zunächst bin ein sproc Aufruf. (Angenommen, der Sproc kann nicht für Entitäten nach Linq verallgemeinert werden.) Ich dachte auch, dass der Tracking-Manager innerhalb des Kontexts eine Identität verwenden würde, wenn ich die untergeordneten Entitäten mit Linq zu Entities vor dem Aufruf des Sprocs geladen hätte Map ', um Entitäten zu identifizieren, die bereits geladen sind und daher herausfinden würden, dass sie nicht auf die Datenbank zugreifen müssen, wenn ich .Load() aufruft. Aber ich denke, ich muss auch .Attach() auf jeder der Kind-Referenzen aufrufen - aber das scheint klobig und ich habe es auch noch nicht funktioniert !!
Weiß jemand, wie ich den Objektgraphen für die Entitäten, die von der Sproc mit dem Minimum von Hin- und Rückreisen in die Datenbank zurückgegeben werden, laden kann?
Danke für die Antwort. Ich habe die erste Option ausprobiert (da mit meinem derzeitigen Niveau von Entity Framework Verständnis, das ist so viel wie ich verstehe !!) und hinzugefügt (von c in Child1 wählen c) .ToList() innerhalb der 'Using Context' und auch überprüft IsLoaded vor jedem Laden, aber es ist immer noch falsch und die Load() ausgeführt wird. Ich bin mir nicht sicher, wie Sie die .Include() zu einem Sproc hinzufügen würden. Was ich dachte, ruft .Attach() mit einer Linq to Entities-Abfrage, die genau die erforderlichen Entitäten auswählt. – Phil
Natürlich ist diese letzte Aussage bezüglich .Attach() Müll zu sehen, da ich das effektiv gegen die Ansammlung von Entitäten anstatt einer Entität selbst durchführen möchte :( – Phil