2

Учитывая следующее:Могу ли я ограничить количество уровней .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); 

Тогда я получаю ответы с объектом Департамента внутри них.

Есть ли способ, которым я могу просто включить курсы, а не возвращать объект Департамента. Например, я могу включить только один уровень (курсы).

+0

Вы выяснили лучший способ достичь этого? Я борюсь с тем же. – shaikhspear

ответ

0

Вы просто включаете один уровень. Объект отдела внутри курса существует, потому что EF выполнил некоторую коррекцию отношений, чтобы вы могли перейти в отдел из курса.

Если вы не хотите отделов, просто заполните курсы напрямую. То есть context.Courses.ToList(); или через курсы репо, если у вас есть.

0

При извлечении объектов EF автоматически заполняет навигационные свойства, когда он уже отслеживает целевой объект. Это означает, что если вы говорите:

// Load the department with a PK of 1 
_DepartmentRepository.Find(1); 

, а затем, используя тот же контекст, например:

// Load a course with PK of 17 
_CourseRepository.Find(17); 

Если курсы отдела идентификатор 1, то EF будет автоматически населенным это Департамент навигация недвижимость даже если вы не указали include. Вы можете остановить это поведение, не сделав виртуальное свойство навигации Департамента.