Entity Framework - Gibt es eine Möglichkeit, untergeordnete Entitäten ohne Include () automatisch zu laden?

Gibt es eine Möglichkeit, Ihre POCO-Klassen so zu dekorieren, dass untergeordnete Entitäten automatisch geladen werden, ohne sie verwenden zu müssen?Include() jedes Mal, wenn Sie sie laden?

Angenommen, ich habe ein Klassenauto mit komplex typisierten Eigenschaften für Räder, Türen, Motor, Stoßstange, Fenster, Auspuff usw. Und in meiner App muss ich mein Auto von meinem DbContext 20 verschiedene Orte mit verschiedenen Abfragen usw. laden Ich möchte nicht jedes Mal angeben müssen, dass ich alle Eigenschaften einschließen möchte, wenn ich mein Auto beladen möchte.

ich möchte sagen

List<Car> cars = db.Car
                .Where(x => c.Make == "Ford").ToList();

//NOT .Include(x => x.Wheels).Include(x => x.Doors).Include(x => x.Engine).Include(x => x.Bumper).Include(x => x.Windows)


foreach(Car car in cars)
{

//I don't want a null reference here.

String myString = car.**Bumper**.Title;
}

Kann ich irgendwie meine POCO Klasse dekorieren oder in meinerOnModelCreating() oder eine Konfiguration in EF festlegen, die angibt, dass alle Teile meines Autos geladen werden sollen, wenn ich mein Auto lade? Ich möchte dies gerne tun, daher ist es nach meinem Verständnis nicht möglich, meine Navigationseigenschaften virtuell zu gestalten. Ich weiß, dass NHibernate ähnliche Funktionen unterstützt.

Ich frage mich nur, ob mir etwas fehlt. Danke im Voraus!

Prost,

Nathan

Ich mag die Lösung unten, aberIch frage mich, ob ich die Aufrufe an die Erweiterungsmethoden verschachteln kann. Angenommen, ich habe eine ähnliche Situation mit Engine, in der es viele Teile gibt, die ich nicht überall einbeziehen möchte. Kann ich so etwas machen? (Ich habe noch keinen Weg gefunden, wie das funktioniert). Auf diese Weise kann ich, wenn ich später herausfinde, dass Engine FuelInjectors benötigt, diese nur in der BuildEngine hinzufügen und muss sie nicht auch in BuildCar hinzufügen.Wie kann ich einen Anruf an eine Sammlung verschachteln, wenn ich die Anrufe verschachteln kann? Möchten Sie BuildWheel () für jedes meiner Räder in meinem BuildCar () aufrufen?

public static IQueryable<Car> BuildCar(this IQueryable<Car> query) {
     return query.Include(x => x.Wheels).BuildWheel()
                 .Include(x => x.Doors)
                 .Include(x => x.Engine).BuildEngine()
                 .Include(x => x.Bumper)
                 .Include(x => x.Windows);
}

public static IQueryable<Engine> BuildEngine(this IQueryable<Engine> query) {
     return query.Include(x => x.Pistons)
                 .Include(x => x.Cylendars);
}

//Or to handle a collection e.g.
 public static IQueryable<Wheel> BuildWheel(this IQueryable<Wheel> query) {
     return query.Include(x => x.Rim)
                 .Include(x => x.Tire);
}

Hier ist ein weiterer sehr ähnlicher Thread, falls er in dieser Situation für andere hilfreich ist, es aber immer noch nicht bewältigt, die Erweiterungsmethoden als Nächstes aufzurufen.

Entity Framework-Linq-Abfrage Include () mehrere untergeordnete Entitäten

Antworten auf die Frage(2)

Ihre Antwort auf die Frage