LINQ to Entity Framework Viele-Viele Eager Loading Ausgabe
-
06-09-2019 - |
Frage
Ich habe die folgende Abfrage:
var MyQuery = from e in ContractContext.Equipments.Include("Manufacturers")
where e.Customers.ID == customer.ID
select e;
Und alles funktioniert, bekomme ich meine Ausrüstung und lädt es richtig, die Hersteller-Tabelle (eifrig). Aber wenn ich versuche, die folgende many-to-many-Abfrage zu tun:
var MyQuery = from e in ContractContext.Equipments.Include("Manufacturers")
where e.Customers.ID == customer.ID
from cce in e.ContractEquipments
where cce.Contracts.EndedOn >= DateTime.Today
select e;
, wobei „ContractEquipments“ ist ein many-to-many-Lookup zwischen „Ausrüstungen“ und „Verträge“, aber wenn diese Abfrage ausgeführt wird, wird der Hersteller Tabelle nicht mehr leicht geladen. Jede Idee, wie dieses Problem zu beheben, ohne dabei wie folgt vor:
if (MyEntity.Manufacturers.IsLoaded == false)
MyEntity.ManufacturersReference.Load()
Dieses Projekt dauert Stunden auszuführen, und ich will die Nummer halten von Datenbank ruft nach unten.
EDIT # 1:
Ich habe auch versucht dies ohne Erfolg:
var MyQuery = from e in ContractContext.Equipments.Include("Manufacturers")
where e.Customers.ID == customer.ID
join cce in ContractContext.ContractEquipments
on e.ID equals cce.Equipments.ID
where cce.Contracts.EndedOn >= DateTime.Today
select e;
Lösung
Frühe oft auch auf einige Arten von Anfragen verloren gehen (das heißt mit extra verbindet etc)
Die Art und Weise, dies zu umgehen ist die Abfrage zu tun, (und dann so lange, wie Sie sind wiederkehrende Einheiten auswählen e dh anstatt eine Projektion dh neu auswählen {...}) Sie Object werfen können und tun das ist um die Außenseite:
var MyQuery = ((from e in ContractContext.Equipments
where e.Customers.ID == customer.ID
from cce in e.ContractEquipments
where cce.Contracts.EndedOn >= DateTime.Today
select e) as ObjectQuery<Equipment>).Include("Manufacturers");
Das sollte funktionieren.
Wenn Sie an weiteren Informationen zu diesem interessiert sind, überprüfen Tipp 22 - Wie einschliessen wirklich machen einschliessen
Alex
Andere Tipps
Haben Sie versucht, eine Stelle wie diese kommen?
var MyQuery = from e in ContractContext.Equipments.Include("Manufacturers")
where e.Customers.ID == customer.ID
join cce in e.ContractEquipments on e.Id equals cce.EquipmentId
where cce.Contracts.EndedOn >= DateTime.Today
select e;