오토 매퍼 : 새 객체를 만들지 않고 속성 값 업데이트


260

automapper를 사용하여 새 객체를 만들지 않고 다른 객체의 속성 값을 업데이트하려면 어떻게해야합니까?

답변:


456

기존 대상을 사용하는 과부하를 사용하십시오.

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

예, 대상 객체를 반환하지만 다른 모호한 시나리오를위한 것입니다. 같은 개체입니다.


28
고마워, 지미 ... 내 스케줄에 영향을주는 학습 곡선이 두렵기 때문에 의도적으로 AutoMapper에서 멀어졌습니다. 내가 너무 오래 머물러서 미안하다 ... 내가 처음 생각했던 것보다 훨씬 쉽다.
Neil T.

13
Automapper는 가장 유용한 라이브러리 중 하나 여야합니다. 나도 그것을 너무 오랫동안 피했다. 나는 오늘 그것을 사용하기 시작했고 사용이 얼마나 쉬운 지 매우 놀랐습니다.
mcottingham

4
나를 위해 작동하지 않습니다. 같은 유형으로 매핑하려고하지만 새 객체를 반환합니다. 사용자 u1, u3 = 새로운 사용자 (); u1 = 신규 사용자 {Id = 1, NickName = "vami"}; 사용자 u4 = 매퍼 맵 (u1, u3); Assert.AreEqual (u1.Id, u3.Id); Assert.AreEqual (u1.NickName, u3.NickName);
Péter

7
참고로, 유형 매개 변수를 지정할 필요가 없다는 것을 알았습니다. 간단히 Mapper.Map (source, destination)이 작동합니다. 좋고 간단합니다!
유다 가브리엘 희망 고

2
릴리스 4.2.1에서 NULL 동작이 변경 되었습니까? 객체에 null을 매핑하면 null이 반환됩니다. 반면 2.2.1에서는 기존 객체에 null을 매핑하면 기존 객체가 반환됩니다.
Peter McEvoy

18

이 작업을 수행하려면 소스 및 대상 유형이 동일한 유형 인 경우에도 맵을 작성해야합니다. 즉, 원하는 경우 다음 Mapper.Map<User, User>(user1, user2); 과 같은지도를 만들어야합니다. Mapper.Create<User, User>()


1
하아! 방금 같은 것을 발견하고 받아 들인 답변에 의견을 추가했습니다. IMHO 당신의 설명없이 받아 들여진 답변은 완전하지는 않지만 내 의견 후에는 최종적으로 :)
Andrzej Martyna

이것은 훌륭한 추가입니다. 그러나 원래 질문은 소스 및 대상의 유형을 언급하지 않았으며 동일한 유형일 필요는 없습니다.
jpaugh

4

수락 된 답변에 사용 된 정적 메소드 대신 IMapper의 인스턴스 메소드를 사용하려는 경우 다음을 수행 할 수 있습니다 (에서 테스트 됨 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);

dest이제 src공유 한 모든 속성 값으로 업데이트됩니다 . 고유 한 속성 값은 동일하게 유지됩니다.

관련 소스 코드는 다음과 같습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.