如何首先急切地加载与实体框架代码的多对多关系?

ado*_*ojp 4 database many-to-many entity-framework eager-loading ef-code-first

为了清楚起见,我将给出我能想到的最基本的例子.

可以说我有两个以下形式的实体:

public class Student
{
    public int Id {get;set}
    public string FullName {get;set;}
    public virtual ICollection<Course> Courses {get;set;}
}

public class Courses
{
    public int Id {get;set;}
    public string FullName {get;set;}
    public virtual ICollection<Student> Students {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

这两个实体映射到三个表,第三个表是连接的表.

当我像这样查询学生时

var allStudents = context.Students;
Run Code Online (Sandbox Code Playgroud)

然后遍历结果以显示学生及其课程列表

foreach (var student in allStudents) 
{
    display(student.FullName);
    foreach (var course in student.Courses) 
    {
        display(course.FullName);
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到第一个查询返回的每个学生的课程查询.

如何通过一个查询告诉实体框架急切地将课程加载到学生中?

Bro*_*ass 11

您希望Include()查询指示您要急切加载相关Course实体:

var allStudents = context.Students.Include( s => s.Courses);
Run Code Online (Sandbox Code Playgroud)

还要确保你有一个

using System.Data.Entity;
Run Code Online (Sandbox Code Playgroud)

在您的代码文件中,以便您可以使用强类型Include()扩展方法.

  • 如果每一侧都有许多项目(以及它们之间有很多关系),或者两侧都包含大型二进制 blob,那么这样的查询将持续很长时间并且将传输千兆字节的冗余数据。 (2认同)