Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 我可以使用AutoMapper将一个列表映射到已实例化对象的另一个列表吗?_Entity Framework_Entity Framework 4_Entity Framework 4.1_Automapper - Fatal编程技术网

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

Entity framework 我可以使用AutoMapper将一个列表映射到已实例化对象的另一个列表吗?,entity-framework,entity-framework-4,entity-framework-4.1,automapper,Entity Framework,Entity Framework 4,Entity Framework 4.1,Automapper,我使用此代码将DTO列表映射到其EF对应项。我想消除循环,更不用说提取了。后者我可以通过在字典中缓存所有Employee对象来实现,但我陷入了循环中 var gridEmps = (List<EmployeeDescriptor>) employeeDescriptorBindingSource.DataSource; Mapper.CreateMap<EmployeeDescriptor, Employee>(); foreach (var newEmp in grid

我使用此代码将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);
}
var gridEmps=(List)employeeDescriptorBindingSource.DataSource;
CreateMap();
foreach(gridEmps中的var newEmp)
{
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);
var gridEmps=(List)employeeDescriptorBindingSource.DataSource;
var dbEmps=context.Employees.ToList();
CreateMap();
Map(gridEmps,dbEmps);
AutoMapper如何知道如何根据对象的键属性将正确的对象从一个列表链接到另一个列表?我知道密钥属性也被映射,但这肯定会干扰EF更改跟踪吗


如何告诉AutoMaper根据源对象和目标对象的键属性链接它们?

我没有找到如何告诉auto mapper集合合并规则而不使用循环。我的解决办法如下:

  • 创建
    类型转换器
    列表->列表

    Mapper
    .CreateMap()文件
    .ConvertUsing(newEmployeeListConverter());
    
  • 将循环放入
    EmployeeListConverter的Convert方法中

  • 使用
    Mapper.Map(gridEmps,dbEmps)
  • Mapper
      .CreateMap<List<EmployeeDescriptor>, List<Employee>>()
      .ConvertUsing(new EmployeeListConverter());