gpt4 book ai didi

entity-framework - 我可以使用 AutoMapper 将一个列表映射到另一已实例化对象的列表吗?

转载 作者:行者123 更新时间:2023-12-02 07:38:23 24 4
gpt4 key购买 nike

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

最佳答案

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

  1. 创建TypeConvertor :List<EmployeeDescriptor> -> List<Employee>

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

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

关于entity-framework - 我可以使用 AutoMapper 将一个列表映射到另一已实例化对象的列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11152755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com