我正在使用此代码将DTO列表映射到其EF对应物。我想消除循环,更不用说获取了。后者我可以通过缓存字典中的所有Employee
对象来完成,但是我被困在循环中。
var gridEmps = (List<EmployeeDescriptor>) employeeDescriptorBindingSource.DataSource;
Mapper.CreateMap<EmployeeDescriptor, Employee>();
foreach (var newEmp in gridEmps)
{
var oldEmp = context.Employees.Single(emp => emp.Id == newEmp.Id);
Mapper.Map(newEmp,oldEmp);
}
如上所述,AutoMapper从我的DTO映射到已经实例化的实体对象,但如果我尝试使用两个列表,就像这样,
var gridEmps = (List<EmployeeDescriptor>) employeeDescriptorBindingSource.DataSource;
var dbEmps = context.Employees.ToList();
Mapper.CreateMap<EmployeeDescriptor, Employee>();
Mapper.Map(gridEmps, dbEmps);
AutoMapper如何知道如何根据键属性将正确的对象从一个列表链接到另一个列表?我知道关键属性也已映射,但这肯定会影响EF更改跟踪吗?
如何告诉AutoMapper按其关键属性链接源和目标对象?
答案 0 :(得分:3)
我还没有找到如何在没有循环的情况下告诉自动映射器集合合并规则。我的解决方案如下:
创建TypeConvertor
:List<EmployeeDescriptor> -> List<Employee>
Mapper
.CreateMap<List<EmployeeDescriptor>, List<Employee>>()
.ConvertUsing(new EmployeeListConverter());
将您的循环放在EmployeeListConverter
Mapper.Map(gridEmps, dbEmps);