2

鉴于以下情况:

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);

然后我得到答案,其中包含一个 Department 对象。

有没有办法我可以只包含课程而不取回 Department 对象。例如,我可以只包括一个级别(课程)。

4

2 回答 2

0

获取实体时,EF 将自动填充它已经跟踪目标对象的导航属性。这意味着如果你说:

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

然后,使用相同的上下文,例如:

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

如果此课程部门 ID 为 1,则 EF 将自动填充其部门导航属性,即使您未指定包含。您可以通过不将 Department 导航属性设为虚拟来停止此行为。

于 2013-06-27T08:59:29.087 回答
0

你只包括一个级别。课程中的部门对象在那里,因为 EF 已经完成了一些关系修复,以便您可以从课程导航到部门。

如果您不想要部门,那么直接获取课程。那是context.Courses.ToList();或者通过课程回购,如果你有的话。

于 2013-06-27T06:16:03.607 回答