AutoMapperのReverseMap()
を読んでいますが、ForMember()
とForPath()
の違いがわかりません。実装について説明しました ここ 。私の経験では、ForMember()
で達成しました。
リバースマッピングを構成した次のコードを参照してください。
_public class Customer
{
public string Surname { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class CustomerDto
{
public string CustomerName { get; set; }
public int Age { get; set; }
}
static void Main(string[] args)
{
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Customer, CustomerDto>()
.ForMember(dist => dist.CustomerName, opt => opt.MapFrom(src => $"{src.Surname} {src.Name}"))
.ReverseMap()
.ForMember(dist => dist.Surname, opt => opt.MapFrom(src => src.CustomerName.Split(' ')[0]))
.ForMember(dist => dist.Name, opt => opt.MapFrom(src => src.CustomerName.Split(' ')[1]));
});
// mapping Customer -> CustomerDto
//...
//
// mapping CustomerDto -> Customer
var customerDto = new CustomerDto
{
CustomerName = "Shakhabov Adam",
Age = 31
};
var newCustomer = Mapper.Map<CustomerDto, Customer>(customerDto);
}
_
動作しています。
ForMember
とForPath
は同じものですか、それともForPath()
よりもForMember()
を使用する必要がありますか?
この場合、不整合を回避するために、ForPathは内部でForMemberに変換されます。 @IvanStoevの言うことは理にかなっていますが、別の見方をすれば、ForPathはForMemberのサブセットであるということです。 ForMemberでもっと多くのことができるからです。したがって、メンバーがある場合はForMemberを使用し、パスがある場合はForPathを使用します:)