我对以下情景感到困惑,
服务,包含以下代码行
$('#hiddendiv').css({"display":"inline"})
调试时,我将鼠标悬停在using(var context = new SchoolContext())
{
var query = context.Students.Where(s => s.Gender =="M");
var results = query.ToList();
}
&展开属性context.Students
并意识到所有学生已经加载,无论过滤器和过滤器 - 在哪里被应用。
但是,我不确定,在某个地方,直到指针点击Results View
,所有内容都会保留在.ToList()
之下。所以在这种情况下IQueryable
应该是var query
而不加载任何数据,只是查询where条件和下一行然后将使用生成的查询命中数据库并返回所需的数据。
我是否遗漏了任何内容或将其与任何其他EF概念混合在一起?
答案 0 :(得分:4)
将鼠标悬停在context.Students
上并打开Results View
强制数据从数据库加载到内存(需要在调试器中显示这些数据)。
所以,只有你的鼠标是原因。
在生产中,数据将按预期过滤。
答案 1 :(得分:1)
当您尝试在调试器中查看未过滤的Students
属性的值时,Visual Studio会为您加载所有学生:
调试时,我将鼠标悬停在上下文上。学生和学生展开属性结果视图
在您尝试评估之前,所有内容都会保持在IQueryable之下。当您调用某个执行查询并执行数据库往返的方法时会发生这种情况 - ToList()
,Count()
等。或者当您尝试在Visual Studio调试器中枚举值时会发生这种情况。