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;
War es hilfreich?

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top