【问题标题】:Can I use AutoMapper to map one list to another list of already instantiated objects?我可以使用 AutoMapper 将一个列表映射到另一个已经实例化的对象列表吗?
【发布时间】:2012-06-22 08:32:42
【问题描述】:

我正在使用此代码将 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 如何知道如何根据 key 属性将正确的对象从一个列表链接到另一个列表?我知道 key 属性也被映射了,但这肯定会干扰 EF 更改跟踪?

如何告诉 AutoMapper 通过它们的关键属性链接源对象和目标对象?

【问题讨论】:

    标签: entity-framework entity-framework-4 entity-framework-4.1 automapper


    【解决方案1】:

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

    1. 创建TypeConvertor:List&lt;EmployeeDescriptor&gt; -&gt; List&lt;Employee&gt;

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

    3. 使用Mapper.Map(gridEmps, dbEmps);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多