Saya mencoba mengatur AutoMapper untuk mengonversi dari Entitas ke DTO. Saya tahu saya seharusnya menggunakan .ForMember()
after Mapper.CreateMap<Entity, DTO>()
untuk menyiapkan pemetaan kustom, tetapi ini sepertinya bukan metode yang tersedia.
Edit untuk klarifikasi: Saya tidak mencari tautan ke dokumentasi yang telah saya baca, atau penjelasan tentang sintaks dasar. Saya menggunakan sintaks yang benar seperti yang dijelaskan dalam jawaban dan dokumentasi, misalnya:
Mapper.CreateMap<EFAddress, Address>()
.ForMember(dest => dest.Code, opt => opt.MapFrom(src => src.Name));
Jika saya memiliki nama tipe yang tidak valid dalam CreateMap <> saya dapat melihat "ForMember" sebagai metode yang valid, mouse menunjukkan tanda tangan metode seperti yang biasanya saya harapkan. Tetapi segera setelah saya memberikan dua tipe yang valid, ForMember mengatakan itu tidak dapat menyelesaikan simbol, seolah-olah metode tersebut tidak tersedia.
Apakah ada semacam batasan pada kelas generik yang tidak saya temui?
Terima kasih
sumber
Mapper.CreateMap<Source, Dest>()
metode statis yang direferensikan di semua jawaban di bawah ini sekarang (2016) ditandai usang .Jawaban:
Coba sintaks berikut:
Mapper .CreateMap<Entity, EntityDto>() .ForMember( dest => dest.SomeDestinationProperty, opt => opt.MapFrom(src => src.SomeSourceProperty) );
atau jika properti sumber dan tujuan memiliki nama yang sama:
Mapper.CreateMap<Entity, EntityDto>();
Silakan periksa bagian yang relevan dari dokumentasi untuk detail lebih lanjut dan skenario pemetaan lainnya.
sumber
Pada akhirnya, saya yakin ini ternyata semacam ketidakcocokan dengan ReSharper.
ReSharper tampaknya telah menyebabkan kode Automapper ditampilkan secara tidak benar, tetapi berfungsi dengan baik (meskipun menampilkan warna merah dengan pesan kesalahan). Mencopot pemasangan ReSharper memperbaiki masalah ini sepenuhnya.
sumber
contoh penerapannya adalah sebagai berikut:
Mapper.CreateMap<Game, GameViewModel>() .ForMember(m => m.GameType, opt => opt.MapFrom(src => src.Type))
Kita perlu memetakan properti ini karena nama properti Game dan GameViewModel berbeda - jika keduanya sama dan memiliki tipe yang sama maka tidak memerlukan ForMember.
Kegunaan lain dari ForMember adalah untuk Mengabaikan Pemetaan
Mapper.CreateMap<Game, GameViewModel>() .ForMember(dest => dest.Prize, opt => opt.Ignore());
sumber
Penggunaan ini serta:
CreateMap<Azmoon, AzmoonViewModel>() .ForMember(d => d.CreatorUserName, m => m.MapFrom(s => s.CreatedBy.UserName)) .ForMember(d => d.LastModifierUserName, m => m.MapFrom(s => s.ModifiedBy.UserName)).IgnoreAllNonExisting();
sumber
Apakah Anda melakukannya seperti ini
Mapper.CreateMap<SourceType,DestinationType>().ForMember(What ever mapping in here)
Halaman ini memiliki beberapa contoh yang bagus
sumber