Могу ли я ограничить, сколько уровней добавляет.include с помощью LINQ и Entity Framework 5?
Учитывая следующее:
public class Department
{
public int DepartmentID { get; set; }
public string Name { get; set; }
public virtual ICollection<Course> Courses { get; set; }
}
public class Course
{
public int CourseID { get; set; }
public string Title { get; set; }
public int Credits { get; set; }
public int DepartmentID { get; set; }
public virtual Department Department { get; set; }
}
Если я выключаю ленивую загрузку и выдаю следующее:
var departments = _DepartmentRepository.GetAll()
.Include(c => c.courses);
Тогда я получаю ответы с объектом Департамента внутри них.
Есть ли способ, которым я могу просто включить курсы, а не вернуть объект Департамента. Например, я могу просто включить один уровень (курсы).
2 ответа
Вы просто включаете один уровень. Объект отдела внутри курса находится там, потому что EF исправил некоторые отношения, чтобы вы могли перейти к отделу из курса.
Если вы не хотите отделов, просто получите курсы напрямую. То есть context.Courses.ToList();
или через репо курсов, если у вас есть.
При получении объектов EF автоматически заполняет свойства навигации, где он уже отслеживает целевой объект. Это означает, что если вы говорите:
// Load the department with a PK of 1
_DepartmentRepository.Find(1);
а затем, используя тот же контекст, например:
// Load a course with PK of 17
_CourseRepository.Find(17);
Если этот идентификатор отдела курсов равен 1, EF автоматически заполнит его свойство навигации отдела, даже если вы не указали включение. Вы можете остановить это поведение, не делая свойство навигации Департамента виртуальным.