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!).
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] 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();
}
}
}
[/code]
Gibt es eine Möglichkeit, die Schleifen loszuwerden und alles in einer Abfrage zu lesen?
Hier sind die Modelle:
[b]Department.cs[/b]
[code]public class Department
{
public int ID { get; set; }
public string Name { get; set; }
public string DepartmentHead { get; set; }
public virtual ICollection Courses { get; set; }
}
[/code]
[b]Course.cs[/b]
[code]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; }
}
[/code]
[b]CourseAuditor.cs[/b]
[code]public class CourseAuditor
{
public int ID { get; set; }
public string StudentName { get; set; }
public int CourseID { get; set; }
}
[/code]
Unsere aktuelle Plattform ist
[list]
[*]TargetFramework=.net5.0;
[*]EntityFrameworkCore=5.0.6 (wir möchten bald auf .NET 6.x migrieren).
[/list]
Mein Hauptanliegen ist die Effizienz auf SQL-Ebene ( Je weniger Abfragen/Roundtrips auf SQL-Ebene, desto besser!).