我对以下场景有点困惑,
- 我有模型“学生”
- 我有 SchoolContext 类 - 公共(public)属性 DbSet Students{get;set;}
服务,代码如下
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
应该是 IQueryable
而无需加载任何数据,只需使用 where 条件进行查询,然后下一行将使用生成的查询命中数据库并仅返回所需的数据.
我是否遗漏了什么或将其与 EF 的任何其他概念混在一起?
最佳答案
将鼠标悬停在 context.Students
上并打开 Results View
强制将数据从数据库加载到内存(需要在调试器中显示这些数据)。
所以,只有你的鼠标悬停是原因。
生产数据将按预期过滤。
关于c# - Entity Framework : Why DbSet<T> Loads all data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44184014/