Saya menggunakan Automapper dan saya memiliki skenario berikut: Class OrderModel memiliki properti yang disebut 'ProductName' yang tidak ada di database. Jadi ketika saya mencoba melakukan pemetaan dengan:
Mapper.CreateMap<OrderModel, Orders>();
Ini menghasilkan pengecualian:
"1 properti berikut di Project.ViewModels.OrderModel tidak dipetakan: 'ProductName'
Saya sudah membaca di Wiki untuk Proyeksi AutoMapper kasus sebaliknya (atribut tambahan ada di tujuan, bukan di sumber yang sebenarnya adalah kasus saya)
Bagaimana saya bisa menghindari automapper untuk melakukan pemetaan properti ini?
Jawaban:
Dari Jimmy Bogard:
CreateMap<Foo, Bar>().ForMember(x => x.Blarg, opt => opt.Ignore());
Itu ada di salah satu komentar di blognya .
sumber
CreateMap<Foo, Bar>().ForSourceMember(x => x.Blarg, opt => opt.Ignore());
mungkin bergunaCreateMap<SourceType, DestType> (MemberList.Source).ForSourceMember(x => x.MySourceProperty, opt => opt.DoNotValidate())
?Ignore()
tetap sintaks yang benar. Ini karena perubahan sintaksisIgnore
dibuat padaISourceMemberConfigurationExpression
antarmuka tetapi tidak padaIMemberConfigurationExpression`3
antarmuka terpisah .Saya mungkin sedikit perfeksionis; Saya tidak terlalu menyukai sintaks ForMember (..., x => x.Ignore ()). Ini hal kecil, tetapi itu penting bagi saya. Saya menulis metode ekstensi ini untuk membuatnya sedikit lebih bagus:
Dapat digunakan seperti:
Anda juga bisa menulis ulang untuk bekerja
params
, tapi saya tidak suka tampilan metode dengan banyak lambda.sumber
params
: Anda bisa mengembalikan array penyeleksi dari dalam lambda tunggal, lalu memetakan masing-masing pemilih denganforeach
atauSelect()
Mungkin tampak tidak berantakan.Kamu bisa melakukan ini:
sumber
Hanya bagi siapa saja yang mencoba melakukan ini secara otomatis, Anda dapat menggunakan metode ekstensi itu untuk mengabaikan properti yang tidak ada pada jenis tujuan:
untuk digunakan sebagai berikut:
terima kasih kepada Can Gencer untuk tipnya :)
sumber: http://cangencer.wordpress.com/2011/06/08/auto-ignore-non-existing-properties-with-automapper/
sumber
'Mapper' does not contain a definition for 'GetAllTypeMaps' [DSSTools]
..Mapper.Configuration.GetAllTypeMaps()
sumberSekarang ada (AutoMapper 2.0)
IgnoreMap
atribut, yang akan saya gunakan daripada sintaks yang lancar yang merupakan IMHO agak berat.sumber
IgnoreMapAttribute
.Saat memetakan model tampilan kembali ke model domain, mungkin jauh lebih bersih untuk hanya memvalidasi daftar anggota sumber daripada daftar anggota tujuan
Sekarang validasi pemetaan saya tidak gagal, membutuhkan yang lain
Ignore()
, setiap kali saya menambahkan properti ke kelas domain saya.sumber
Bisa menggunakan IgnoreAttribute di properti yang perlu diabaikan
sumber
[IgnoreMap]
dariIgnoreMapAttribute
Halo Semua Silakan Gunakan ini berfungsi dengan baik ... untuk auto mapper gunakan beberapa .ForMember dalam C #
sumber