以下代码(.Net Core 3.0)读取数据库表,并使用AutoMapper从表中获取一些列。
var employees = await _context.Employees // Employee table has a lot of columns
.ProjectTo<EmployeeLookupDto>(_mapper.ConfigurationProvider) // EmployeeLookupDto only has three columns
.OrderBy(e => e.Name)
.ToListAsync(cancellationToken);
它将将数据库表的所有列读取到内存,然后将数据映射到三个属性EmployeeLookupDto
类吗?还是会生成带有三列选择子句的SQL?
答案 0 :(得分:5)
Automapper根本不生成SQL。
相反,它以这种方式生成ParseUser.getCurrentUser().get("customFieldKey")
实例,以使您的SQL提供程序(L2S,EF或其他)很可能能够转换为SQL。
是的,在您的示例中,生成的SQL仅包含3列和一个IQueryable<T>
子句。
同样,AutoMapper不会生成任何SQL代码。
这部分代码:
Order By
(即_context.Employees
.ProjectTo<EmployeeLookupDto>(_mapper.ConfigurationProvider)
)将转换为以下代码:
IQueryable<Employee>
再次,这一次是您的DTO的类型_context.Employees
.Select(T => new EmployeeLookupDto
{
DtoField1 = T.EmployeeField1,
DtoField2 = T.EmployeeField2,
...
})
。此时,AutoMapper的工作已经完成。
此后,由您的EF Core SQL提供程序将这个实例IQueryable
插入OrderBy
,然后实际上在IOrderedQueryable
方法中生成并执行SQL代码。