객체를 객체로 복사 (Automapper? 사용)
수업이 있습니다.
public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
}
두 개의 Person 인스턴스 (person1 및 person2)가 있습니다. person2의 내용을 person1에 복사하고 싶습니다. 속성 별 속성이 아닌 하나의 명령으로이 복사본을 만들고 싶습니다 .
person1.LastName = person2.LastName;
문서에서 객체를 다른 객체로 복사하는 것을 보았지만 유형이 다릅니다. 유형이 같을 때 객체를 어떻게 복사 할 수 있습니까?
내가 질문을 이해로서, 영업 이익은 복제에 원하지 않는 PERSON2 의 새로운 인스턴스에 한 사람 만의 내용을 복사하는 방법에 대한 요구하고있다 PERSON2을 에 이미 기존 인스턴스 ( PERSON1 의) 사람 . 이 작업을 수행하는 AutoMapper의 Mapper.Map 메서드 오버로드가 있습니다.
Mapper.CreateMap<Person, Person>();
Mapper.Map<Person, Person>(person2, person1);
//This copies member content from person2 into the _existing_ person1 instance.
참고 1 : @alexl의 답변은 Person 의 새 인스턴스를 만듭니다 . person1이 가리키는 인스턴스에 대한 다른 참조가있는 경우 person1 변수를 새 인스턴스로 리디렉션하면 (아마도) 원하는 데이터 업데이트를 얻지 못할 것 입니다.
참고 2 : (재귀 적) 복사 깊이는 AutoMapper가 매핑 순간에 알고있는 매핑에 따라 달라진다는 점을 알고 있어야합니다! Person 클래스
의 멤버가 Brain 클래스 이고 복사 데이터 호출 전에 추가로 수행 한 경우 person1 은 현재 Brain 인스턴스를 유지 하지만이 Brain 은 person2 의 Brain 인스턴스 의 멤버 값을 받습니다 . 그것은 당신이 깊은 사본 을 가지고 있다는 것입니다 . 그러나 AutoMapper 후 복사하기 전에 뇌 - 뇌 매핑이없는 경우 PERSON1 의 ' 뇌를Mapper.CreateMap<Brain, Brain>();
Mapper.Map<Person, Person>(person2, person1);
멤버는 person2 가 참조하는 것과 동일한 Brain 인스턴스를 참조합니다. 그것은 당신이 얕은 복사본 을 얻을 것 입니다. 이는 모든 멤버에 반복적으로 적용되므로 AutoMapper에 전체 복사하려는 멤버 클래스에 대한 매핑이 있고 얕은 복사하려는 멤버 클래스에 대한 매핑이 없는지 확인하는 것이 좋습니다.
AutoMapper 사용에 대한 대안은 리플렉션 을 사용 하는 접근 방식 을 사용 하는 것 입니다. (링크의 코드는 얕은 복사를 수행합니다!)
"AutoMapper가 대상 객체 자체를 생성하는 대신 기존 객체를 채우기위한 지원"이 AutoMapper 버전 0.2 에 추가되었습니다 .
당신이 질문 때문에 With Automapper?
내가 제안 할 수 있습니다 당신은 AutoMapper를 사용하지 않는?
대신에 사용 MemberwiseClone()
A의 Clone
방법, 예를 들어,
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public Person Clone()
{
return (Person) MemberwiseClone();
}
}
최신 정보
원래 포스터를 acheive하지 않는이주의하는 것이 그 중요한 복사 욕망 person1
에 person2
그러나 (@Jimmy Bogard가 지적했듯이) 객체 MemberwiseClone()
의 복사본 (복제본) 을 만들어야하는 경우 사용하는 것이 좋습니다 .
예를 들어이 작업을 수행하는 경우 :
//I need a copy of person1 please! I'll make a new person object
//and automapper everything into it!
var person2 = new Person2();
Mapper.Map<Person, Person>(person1, person2)
그런 다음 정말로 사용해야합니다 / 사용할 수 있습니다
//oh wait, i can just use this!
var person2 = person1.Clone()
Mapper.CreateMap<Person, Person>();
// Perform mapping
var person1 = Mapper.Map<Person, Person>(person2);
도움이 되었기를 바랍니다.
Automapper를 사용하는 이유는 무엇입니까? 간단한 복제가 당신을 위해 일을 할 것입니다.
자세히 알아보기 : 딥 클로닝 객체
참고 URL : https://stackoverflow.com/questions/5713556/copy-object-to-object-with-automapper
'IT TIP' 카테고리의 다른 글
Rails가 Ajax 게시물에서 세션을 다시로드하지 않음 (0) | 2020.11.30 |
---|---|
CSS에서 100 %의 1/3을 표현하는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.30 |
mysql은 내부 또는 외부 명령, 작동 가능한 프로그램 또는 배치로 인식되지 않습니다. (0) | 2020.11.30 |
모나 딕 파싱에 비해 응용 파싱의 이점은 무엇입니까? (0) | 2020.11.30 |
C #은 X 분마다 스레드를 실행하지만 해당 스레드가 아직 실행되고 있지 않은 경우에만 (0) | 2020.11.30 |