Otomatik Harita: Yeni bir nesne oluşturmadan özellik değerlerini güncelleyin


260

Yeni bir nesne oluşturmadan başka bir nesnenin özellik değerlerini güncellemek için automapper'ı nasıl kullanabilirim?

Yanıtlar:


456

Mevcut hedefi alan aşırı yükü kullanın:

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

Evet, hedef nesneyi döndürür, ancak bu sadece diğer belirsiz senaryolar içindir. Aynı nesne.


28
Teşekkürler Jimmy ... AutoMapper'dan bilerek uzak durdum çünkü programımı etkileyen öğrenme eğrisinden korkuyordum. Çok uzun süre uzak durduğum için üzgünüm ... Başlangıçta düşündüğümden çok daha kolay.
Neil T.

13
Automapper, orada en yararlı kütüphanelerden biri olmalıdır. Ben de bundan çok uzun süre kaçındım, çok uzun. Bugün kullanmaya başladım ve kullanmanın ne kadar kolay olduğuna çok şaşırdım.
mcottingham

4
Benim için çalışmıyor. Aynı türle eşleştirmeye çalışıyorum, ancak yeni bir nesne döndürüyor. Kullanıcı u1, u3 = yeni Kullanıcı (); u1 = yeni Kullanıcı {Id = 1, NickName = "vami"}; Kullanıcı u4 = Mapper.Map (u1, u3); Assert.AreEqual (u1.Id, u3.Id); Assert.AreEqual (u1.NickName, u3.NickName);
Péter

7
Bilginize, tür parametrelerini belirtmenize gerek olmadığını keşfettim. Basitçe, Mapper.Map (kaynak, hedef) çalışacaktır. Güzel ve basit!
Judah Gabriel Himango

2
4.2.1 sürümünde NULL davranışı değişti mi? Bir nesneye null eşlemenin null döndürdüğünü görüyorum; oysa 2.2.1'de null değerinin var olan bir nesneye eşlenmesi var olan nesneyi döndürdü.
Peter McEvoy

18

Bu işi yapmak için aynı türden olsalar bile, kaynak ve hedef türleri için CreateMap gerekir. Bu, şu şekilde bir Mapper.Map<User, User>(user1, user2); harita oluşturmanız gerektiği anlamına gelir Mapper.Create<User, User>()


1
Ha! Ben de aynısını buldum ve kabul edilen cevaba bir yorum ekledim. IMHO açıklamanız olmadan kabul edilen cevap tam değil ama benim yorumdan sonra nihayet olabilir :)
Andrzej Martyna

Bu harika bir ektir. Ancak, asıl soru kaynak ve hedef türlerinden bahsetmedi ve aynı tür olmasını gerektirmedi.
jpaugh

4

Kabul edilen yanıtta kullanılan statik yöntem yerine IMapper örnek yöntemini kullanmak istiyorsanız, aşağıdakileri yapabilirsiniz (test edildi 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);

destartık srcpaylaştığı tüm özellik değerleriyle güncellenecek . Eşsiz özelliklerinin değerleri aynı kalacaktır.

İşte ilgili kaynak kodu

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.