我得到以下情形有点糊涂了,实体框架:为什么DbSet <T>加载所有数据
- 我有模型“学生”
- 我SchoolContext类 - 公共财产DbSet学生{获取;集;}
服务,具有以下的代码行
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的任何其他概念混合?
可能是因为调试器导致它执行 – haim770
当你悬停在属性上时,你附加的调试器正在枚举'Students',在生产中这不会发生。 – Igor
您的意思是,在实际的情况下,它会生成查询,然后加载数据?这是否只是因为调试造成的? – Kenz