【发布时间】:2017-12-19 10:11:52
【问题描述】:
假设我有一个具有如下虚拟导航属性的实体:
public class School
{
public long Id { get; set; }
public virtual ICollection<Students> Students { get; set; }
}
据我了解,EF6 使用代理来启用 Students 的延迟加载,但执行以下 LINQ 查询:
var myStudent = this.Students.Single(x => x.Id == id);
var studentsCount = this.Students.Count();
var bestStudents = this.Students
.OrderByDescending(x => x.GPA)
.Take(5)
.ToArray();
导致 SQL 查询(就像IQueryable<T> 一样)?或者它只是一个延迟加载集合,在第一次请求后将所有学生加载到内存中,然后执行简单的IEnumerable<T> LINQ 行为?
【问题讨论】:
-
这取决于...尽管您确实不应该让您的实体类包含额外的代码 - 如果您尝试访问学生集合,您可能会遇到问题,特别是在上下文已被处理的情况下稍后。
-
@DavidG 谢谢!我的问题听起来太宽泛了 :) 我已经把它编辑掉了。
-
第二个代码片段中的“this”是什么?
标签: c# linq entity-framework-6 navigation-properties