当前位置:  开发笔记 > 编程语言 > 正文

EF代码可以与AutoMapper的Project一起生成高效的SQL吗?

如何解决《EF代码可以与AutoMapper的Project一起生成高效的SQL吗?》经验,为你挑选了1个好方法。

下面的代码(.Net Core 3.0)读取数据库表,并使用AutoMapper从表中获取一些列。

var employees = await _context.Employees // Employee table has a lot of columns
    .ProjectTo(_mapper.ConfigurationProvider) // EmployeeLookupDto only has three columns
    .OrderBy(e => e.Name)
    .ToListAsync(cancellationToken);

它将数据库表的所有列读取到内存,然后将数据映射到三个属性EmployeeLookupDto类吗?还是实际上会生成带有三列select子句的SQL?



1> AgentFire..:

Automapper根本不生成SQL。

相反,它IQueryable以这样的方式生成实例,即您的SQL提供程序(L2S,EF或其他)很可能将其转换为SQL。

是的,在您的示例中,生成的SQL仅包含3列和一个Order By子句。

编辑:

同样,AutoMapper不会生成任何SQL代码。

您的代码的这一部分:

_context.Employees
    .ProjectTo(_mapper.ConfigurationProvider) 

(即IQueryable)将被转换为以下代码:

_context.Employees
    .Select(T => new EmployeeLookupDto
    {
         DtoField1 = T.EmployeeField1,
         DtoField2 = T.EmployeeField2,
         ...
    })

这次又是IQueryableDTO 类型的。此时,AutoMapper的工作已完成。

之后,一切由您的EF Core SQL提供程序OrderBy将此实例插入IOrderedQueryable,然后实际在该ToListAsync方法中生成并执行SQL代码。

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有