EF是否会像优化匿名类型投影一样优化命名类型投影?
EF Core投影到命名类型是否仅加载所需列?
在EF Core的高效查询相关内容中提到,将实体查询投影到匿名类型时,EF只会加载指定的列,示例写法如下:
context.Blogs.Select(b => new { b.Id, b.Url })
针对你提出的两种投影到命名类型的写法,EF Core都能识别并仅加载所需的Id和Url列:
- 写法一:对象初始化器
context.Blogs.Select(b => new BlogModel { Id = b.Id, Url = b.Url })
EF Core会分析初始化器中用到的属性,生成仅包含Id和Url列的SQL查询,不会加载Blog实体的其他列。
- 写法二:构造函数+对象初始化器
context.Blogs.Select(b => new BlogModel(b.Id) { Url = b.Url })
这种写法EF Core同样能正确解析,它会识别构造函数参数对应的Id属性,以及初始化器里的Url属性,最终只查询这两个列。
需要注意:只要BlogModel不是EF Core跟踪的实体类型(一般这类用于投影的都是DTO类),就会正常触发这个优化。
内容的提问来源于stack exchange,提问作者Kevin Krumwiede
相关产品推荐
相关产品推荐

