Вложенные поля в Entity Framework Core: могу ли я получить все в одном запросе?C#

Место общения программистов C#
Ответить
Anonymous
 Вложенные поля в Entity Framework Core: могу ли я получить все в одном запросе?

Сообщение Anonymous »

Я пытаюсь эффективно манипулировать сложными записями с несколькими уровнями вложенных полей в C#/ASP.NET Core/Entity Framework Core.
Я создал небольшое тестовое приложение с моделями EF «Отделы > Курсы > CourseAuditors».
Вот мой запрос:

Код: Выделить всё

    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();
}
}
}
Можно ли как-нибудь избавиться от циклов и прочитать все одним запросом?
Вот модели:
Department.cs

Код: Выделить всё

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

Код: Выделить всё

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

Код: Выделить всё

public class CourseAuditor
{
public int ID { get; set; }
public string StudentName { get; set; }
public int CourseID { get; set; }
}
Наша текущая платформа:
  • TargetFramework=.net5.0;
  • EntityFrameworkCore=5.0.6 (мы хотели бы в ближайшее время перейти на .NET 6.x).
Меня больше всего беспокоит эффективность на уровне SQL ( чем меньше запросов/обходов уровня SQL, лучше!).

Подробнее здесь: https://stackoverflow.com/questions/731 ... -one-query
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»