想象一个简单的数据库,学生有多个课程和多个考试,给出已经从数据库加载的学生列表,我想用每个数据库调用填充课程和考试列表。
我知道我可以使用预先包含,这会导致一次调用以检索所有内容:
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调用。我怎样才能更有效地实现这一目标?
答案 0 :(得分:0)
根据我的经验,您无法同时加载多个EntityCollections。您在问题中提供了两个选项。您可以在单个查询中急切地加载相关实体,也可以稍后通过查询加载它们以加载每个EntityCollection。
答案 1 :(得分:0)
确保为实体框架模型关闭延迟加载,IIRC它会导致这些集合属性在您迭代它们时触发查询。否则看起来它只能用于一个查询。