EF4通过单次调用检索多对多

时间:2011-02-08 15:31:26

标签: entity-framework-4

想象一个简单的数据库,学生有多个课程和多个考试,给出已经从数据库加载的学生列表,我想用每个数据库调用填充课程和考试列表。

我知道我可以使用预先包含,这会导致一次调用以检索所有内容:

var students = context.Students.Include("Courses").Include("Exams").ToList();

但我还需要能够在以后加载课程和考试。

我试过了:

var courses = students.SelectMany(x => x.Courses).ToList();
var exams = students.SelectMany(x => x.Exams).ToList();

但是这导致每个学生有两个db调用。我怎样才能更有效地实现这一目标?

2 个答案:

答案 0 :(得分:0)

根据我的经验,您无法同时加载多个EntityCollections。您在问题中提供了两个选项。您可以在单个查询中急切地加载相关实体,也可以稍后通过查询加载它们以加载每个EntityCollection。

答案 1 :(得分:0)

确保为实体框架模型关闭延迟加载,IIRC它会导致这些集合属性在您迭代它们时触发查询。否则看起来它只能用于一个查询。