3

我正在使用此代码将 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 通过它们的关键属性链接源对象和目标对象?

4

1 回答 1

3

我还没有找到如何在没有循环的情况下告诉自动映射器集合合并规则。我的解决方案如下:

  1. 创建TypeConvertorList<EmployeeDescriptor> -> List<Employee>

    Mapper
      .CreateMap<List<EmployeeDescriptor>, List<Employee>>()
      .ConvertUsing(new EmployeeListConverter());
    
  2. 将您的循环放在 Convert 的方法中EmployeeListConverter

  3. 采用Mapper.Map(gridEmps, dbEmps);
于 2012-06-22T13:30:45.403 回答