c# - Entity Framework : Why DbSet<T> Loads all data

标签 c# entity-framework linq

我对以下场景有点困惑,

  1. 我有模型“学生”
  2. 我有 SchoolContext 类 - 公共(public)属性 DbSet Students{get;set;}
  3. 服务,代码如下

    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/

相关文章:

c# - 如何获取系统帐户下的所有用户应用程序数据文件夹?

javascript - 应用服务未获取JS发送的参数值

c# - 部署使用 Entity Framework 的应用程序并在客户端计算机上创建数据库

entity-framework - Entity Framework 5 和字符枚举

c# - Linq 失败 - System.Data.Linq.dll 中发生类型 'System.Data.SqlClient.SqlException' 的第一次机会异常

c# - 多表linq查询?

c# - 在不调用外部 api 的情况下在 rest web API 的 Controller 内部查找客户端公共(public) IP 地址

C# 无法转换为 'Microsoft.EntityFrameworkCore.DbContextOptions'

C# linq 可能的多重枚举最佳实践

c# - SqlDataSource OnInserted 过早触发