Verschachtelte Felder in Entity Framework Core: Kann ich alles in einer Abfrage abrufen?

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Verschachtelte Felder in Entity Framework Core: Kann ich alles in einer Abfrage abrufen?

by Guest » 24 Dec 2024, 17:55

Ich versuche, komplexe Datensätze mit mehreren Ebenen verschachtelter Felder in C# / ASP.NET Core / Entity Framework Core effizient zu bearbeiten.
Ich habe eine kleine Test-App mit EF-Modellen erstellt „Abteilungen > Kurse > Kursauditoren“.
Hier ist meine Anfrage:

Code: Select all

    public void OnGet()
{
Departments = ctx.Departments.ToList();
foreach (var department in Departments)
{
department.Courses = ctx.Courses
.Where(c => c.DepartmentID == department.ID)
.ToList();
foreach (var course in department.Courses)
{
course.CourseAuditors = ctx.CourseAuditors
.Where(c => c.CourseID == course.ID)
.ToList();
}
}
}
Gibt es eine Möglichkeit, die Schleifen loszuwerden und alles in einer Abfrage zu lesen?
Hier sind die Modelle:
Department.cs

Code: Select all

public class Department
{
public int ID { get; set; }
public string Name { get; set; }
public string DepartmentHead { get; set; }

public virtual ICollection Courses { get; set; }
}
Course.cs

Code: Select all

public class Course
{
public int ID { get; set; }
public string Name { get; set; }
public string Instructor { get; set; }
public string Location { get; set; }
public int DepartmentID { get; set; }
public virtual ICollection CourseAuditors { get; set; }
}
CourseAuditor.cs

Code: Select all

public class CourseAuditor
{
public int ID { get; set; }
public string StudentName { get; set; }
public int CourseID { get; set; }
}
Unsere aktuelle Plattform ist
  • TargetFramework=.net5.0;
  • EntityFrameworkCore=5.0.6 (wir möchten bald auf .NET 6.x migrieren).
Mein Hauptanliegen ist die Effizienz auf SQL-Ebene ( Je weniger Abfragen/Roundtrips auf SQL-Ebene, desto besser!).

Top