Automapper: Perbarui nilai properti tanpa membuat objek baru


260

Bagaimana saya bisa menggunakan automapper untuk memperbarui nilai properti objek lain tanpa membuat yang baru?

Jawaban:


456

Gunakan kelebihan yang mengambil tujuan yang ada:

Mapper.Map<Source, Destination>(source, destination);

Ya, itu mengembalikan objek tujuan, tapi itu hanya untuk beberapa skenario tidak jelas lainnya. Itu adalah objek yang sama.


28
Terima kasih, Jimmy ... Saya sengaja menjauh dari AutoMapper karena saya takut kurva pembelajaran memengaruhi jadwal saya. Saya secara resmi minta maaf saya telah pergi begitu lama ... itu jauh lebih mudah daripada yang saya pikirkan.
Neil T.

13
Automapper harus menjadi salah satu perpustakaan paling berguna di luar sana. Saya juga menghindarinya untuk waktu yang lama, terlalu lama. Saya mulai menggunakannya hari ini dan saya sangat terkejut betapa mudahnya menggunakannya.
mcottingham

4
Tidak bekerja untukku. Saya mencoba memetakan ke jenis yang sama, tetapi mengembalikan objek baru. Pengguna u1, u3 = Pengguna baru (); u1 = Pengguna baru {Id = 1, NickName = "vami"}; Pengguna u4 = Mapper.Map (u1, u3); Assert.AreEqual (u1.Id, u3.Id); Assert.AreEqual (u1.NickName, u3.NickName);
Péter

7
FYI, saya menemukan Anda tidak perlu menentukan parameter tipe. Sederhananya, Mapper.Map (sumber, tujuan) akan berfungsi. Bagus dan sederhana!
Judah Gabriel Himango

2
Apakah perilaku NULL berubah dalam rilis 4.2.1? Saya melihat bahwa pemetaan null menjadi objek mengembalikan null; sedangkan pada 2.2.1, pemetaan null ke objek yang ada mengembalikan objek yang ada.
Peter McEvoy

18

Untuk membuat ini berfungsi, Anda harus membuat MapMap untuk jenis sumber dan tujuan meskipun jenisnya sama. Itu berarti jika Anda ingin, Mapper.Map<User, User>(user1, user2); Anda perlu membuat peta seperti ini Mapper.Create<User, User>()


1
Ha! Saya baru saja menemukan yang sama dan menambahkan komentar ke jawaban yang diterima. IMHO jawaban yang diterima tanpa penjelasan Anda tidak lengkap tetapi setelah komentar saya, akhirnya :)
Andrzej Martyna

Ini adalah tambahan yang bagus. Namun, pertanyaan awal tidak menyebutkan jenis sumber dan tujuan, dan tidak mengharuskan mereka jenis yang sama.
jpaugh

4

Jika Anda ingin menggunakan metode instan IMapper, daripada metode statis yang digunakan dalam jawaban yang diterima, Anda dapat melakukan yang berikut (diuji dalam AutoMapper 6.2.2)

IMapper _mapper;
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Source, Destination>();
});
_mapper = config.CreateMapper();

Source src = new Source
{
//initialize properties
}

Destination dest = new dest
{
//initialize properties
}
_mapper.Map(src, dest);

destsekarang akan diperbarui dengan semua nilai properti srcyang dibagikannya. Nilai properti uniknya akan tetap sama.

Berikut kode sumber yang relevan

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.