Soweit ich die Frage verstehe, möchte OP person2 nicht in eine neue Instanz von Person klonen , sondern fragt, wie der Inhalt von person2 in eine bereits vorhandene Instanz ( person1 ) von Person kopiert werden soll . Es gibt eine Überladung der Mapper.Map-Methode von AutoMapper, die dies für Sie erledigt:
Mapper.CreateMap<Person, Person>();
Mapper.Map<Person, Person>(person2, person1);
Anmerkung 1: Die Antwort von @ alexl erstellt eine neue Instanz von Person . Wenn Sie andere Verweise auf die Instanz haben, auf die person1 verweist, erhalten diese nicht die (vermutlich) gewünschte Datenaktualisierung, wenn Sie die Variable person1 auf eine neue Instanz umleiten .
Hinweis 2: Sie müssen sich bewusst sein, dass die (rekursive) Kopiertiefe davon abhängt, welche Zuordnungen AutoMapper zum Zeitpunkt der Zuordnung kennt!
Wenn ein Mitglied der Person Klasse sagen , die Klasse ist Gehirn , und Sie haben zusätzlich getan Mapper.CreateMap<Brain, Brain>();
vor dem Kopieren von Daten Mapper.Map<Person, Person>(person2, person1);
Anruf, dann person1 ihren gegenwärtigen halten Gehirn Instanz aber das Gehirn wird die Mitgliedswerte erhalten person2 ‚s Gehirn - Instanz. Das heißt, Sie haben eine tiefe Kopie .
Wenn AutoMapper jedoch vor dem Kopieren keine Brain-Brain-Zuordnung hat, ist das Gehirn von person1Das Mitglied verweist auf dieselbe Brain- Instanz wie die Person2 . Das heißt, Sie erhalten eine flache Kopie .
Dies gilt rekursiv für alle Mitglieder. Stellen Sie daher sicher, dass AutoMapper Zuordnungen für Mitgliedsklassen enthält, die Sie tief kopieren möchten, und keine Zuordnungen für Mitgliedsklassen, die Sie flach kopieren möchten.
Eine Alternative zur Verwendung von AutoMapper wäre die Verwendung eines Ansatzes mit Reflexion . (Beachten Sie, dass der Code im Link eine flache Kopie erstellt!)
"Unterstützung für das Füllen eines vorhandenen Objekts, anstatt dass AutoMapper das Zielobjekt selbst erstellt" wurde in AutoMapper Version 0.2 hinzugefügt .