ADO.NET Entity Framework 4.1: Endlich Eager Loading mit Lambda-Ausdrücken statt Zeichenketten

Der Dotnet-Doktor  –  0 Kommentare

Eine wirklich erhebliche Verbesserung in ADO.NET Entity Framework 4.1 ist die Möglichkeit, die für das Eager Loading notwendigen Include()-Anweisungen durch Lambda-Ausdrücke anzugeben statt wie bisher durch Zeichenketten. Das gab es schon in .NET 3.5 in LINQ-to-SQL, aber im Entity Framework 4.0 noch nicht.

Voraussetzung ist, dass der Namensraum System.Data.Entity (aus der EntityFramework.dll) in den using-Anweisungen steht, denn dort ist das Lamdba-fähige Include() als Erweiterungsmethode hinterlegt. Das alte Include() auf Zeichenkettenbasis gibt es weiterhin in System.Data.Objects. Das neue Include ist auch für Abfragen verfügbar, die auf dem alten ObjectContext API und noch nicht auf dem neuen DbContext API basieren.

   WWWings6Entities ctx = new WWWings6Entities();

// Unsicheres Eager Loading im Stil von Entity Framework 1.0/4.0
var FlugQuery1 = (from x in ctx.Flug.Include("Passagier.Person")
.Include("Pilot") where x.Abflugort == "Rom" select x);
   Console.WriteLine("Fluggast #1 von Flug " + FlugQuery1.ToList()
[2].FlugNr + ":" + FlugQuery1.ToList()[0].Passagier.ToList()
[0].Person.Name);

// Typsicheres Eager Loading im Entity Framework 4.1
var FlugQuery2 = (from x in ctx.Flug.Include(f =>
f.Passagier.Select(p => p.Person)).Include(f =>
f.Pilot) where x.Abflugort == "Berlin" select x);

Console.WriteLine("Fluggast #1 von Flug " + FlugQuery1.ToList()
[2].FlugNr + ":" + FlugQuery1.ToList()[0].Passagier.ToList()
[0].Person.Name);

ctx.Dispose();