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 から既にインスタンス化されたエンティティ オブジェクトにマップしますが、2 つのリストを使用してこれを試みると、次のようになります。

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. 作成TypeConvertor:List<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 に答える