web-dev-qa-db-ja.com

プロパティの名前が異なる場合のマッピングルールの指定方法

私はAutomapperフレームワークの初心者です。次のようなドメインクラスとDTOクラスがあります。

public class Employee
{
   public long Id {get;set;}
   public string Name {get;set;}
   public string Phone {get;set;}
   public string Fax {get;set;}
   public DateTime DateOfBirth {get;set;}
}

public class EmployeeDto
{
   public long Id {get;set;}
   public string FullName {get;set;}
   public DateTime DateOfBirth {get;set;}
}

注:Employeeクラスのプロパティ "Name"の名前は、EmployeeDtoクラスのプロパティ "FullName"とは異なります。

そして、これはEmployeeオブジェクトをEmployeeDtoにマップするコードです:

Mapper.CreateMap<Employee, EmployeeDto>(); // code line (***)
EmployeeDto dto = Mapper.Map<Employee, EmployeeDto>(employee); 

私の質問は:Employee(ソースクラス)をEmployeeDto(宛先クラス)にマッピングする場合、マッピングルールを指定するにはどうすればよいですか?言い換えれば、上記のコード行(***)でもっと多くのことを行う必要がありますか?

128
Thomas.Benz

気にしないで、私自身が解決策を見つけました:

Mapper.CreateMap<Employee, EmployeeDto>()
    .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name));
259
Thomas.Benz

本当に古いスレッドですが、上記のコメントをAutomapper 8.1以降を使用して更新されたアプローチにまとめるだけです...

var mapConfig = new MapperConfiguration(
   cfg => cfg.CreateMap<Employee, EmployeeDto>()
      .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name))
);

次に、mapConfigを使用してマッパーを構築します。

var mapper = mapConfig.CreateMapper();
0
ebol2000