objek pemetaan automapper

Aug 29 2020

Persyaratan tambahan ini berdasarkan pertanyaan ini salah satu sumber untuk beberapa tujuan

class Dest1    
{    
 string prop1;
 string prop2;
 string prop3;
 pubic List<Dest3> Dests3 {get;set;}
}

    class Dest3        
    {    
     string prop7;    
   string prop8;
    }

 class Source2
 {
 string prop7;
 string prop8;
 }
  1. Saya perlu memetakan Source2 ke Dest1 di mapper otomatis (Dest3 adalah daftar yang juga perlu dipetakan)

Kelas pemetaan saya: (tidak berfungsi)

 CreateMap<Source2, Dest3>();
            CreateMap<Source2, Dest1>()
                .ForMember(d => d.Dests3 , opt => opt.MapFrom(s => s));

Jawaban

2 reynoldsbj Aug 30 2020 at 04:30

Jadi, dengan asumsi bahwa ketika pemetaan ini terjadi, Dests3 harus berupa daftar item tunggal, konfigurasi untuk ini akan terlihat seperti ini:

var configuration = new MapperConfiguration(cfg =>
// Mapping Config
cfg.CreateMap<Source2, Dest1>()
    .ForMember(dest => dest.prop1, opt => opt.Ignore())
    .ForMember(dest => dest.prop2, opt => opt.Ignore())
    .ForMember(dest => dest.prop3, opt => opt.Ignore())
    .ForMember(dest => dest.Dests3, opt => opt.MapFrom(src => 
                                                      new List<Dest3> { 
                                                          new Dest3 {
                                                              prop7 = src.prop7,
                                                              prop8 = src.prop8
                                                          }
                                                      }));

// Check AutoMapper configuration
configuration.AssertConfigurationIsValid();

Kemudian, Anda dapat menggunakan mapper untuk menangani pemetaan di mana pun Anda membutuhkannya, seperti:

public class Foo {
    private IMapper _mapper;
    public Foo(IMapper mapper) {
        _mapper = mapper;
    }

    // Map Source2 -> Dest1
    public Dest1 Bar(Source2 source) {
        return _mapper.Map<Dest1>(source);
    }
}