Như tôi hiểu câu hỏi, OP không muốn sao chép person2 thành một cá thể mới của Person , nhưng đang hỏi cách sao chép nội dung của person2 vào một cá thể đã tồn tại ( person1 ) của Person . Có quá nhiều phương thức Mapper.Map của AutoMapper thực hiện điều này cho bạn:
Mapper.CreateMap<Person, Person>();
Mapper.Map<Person, Person>(person2, person1);
Lưu ý 1: Câu trả lời của @ alexl tạo ra một thể hiện mới của Person . Nếu bạn có các tham chiếu khác đến cá thể mà person1 trỏ tới, những tham chiếu này sẽ không nhận được (có lẽ) cập nhật dữ liệu mong muốn nếu bạn chuyển hướng biến person1 đến một cá thể mới.
Lưu ý 2: Bạn cần lưu ý rằng độ sâu sao chép (đệ quy) phụ thuộc vào những gì mà AutoMapper biết về ánh xạ tại thời điểm ánh xạ!
Nếu một thành viên của Person lớp là nói lớp não và bạn bổ sung đã làm Mapper.CreateMap<Brain, Brain>();
trước khi các bản sao dữ liệu Mapper.Map<Person, Person>(person2, person1);
cuộc gọi, sau đó PERSON1 sẽ tiếp tục như hiện nay Brain dụ nhưng điều này Brain sẽ nhận được các giá trị thành viên của nhân viên2 's Brain dụ. Đó là bạn có một bản sao sâu .
Nhưng nếu AutoMapper không có ánh xạ Brain-Brain trước khi sao chép, thì của person1 Brainthành viên sẽ tham chiếu cùng một cá thể Brain với tham chiếu một người2 . Đó là bạn sẽ nhận được một bản sao nông .
Điều này áp dụng đệ quy cho tất cả các thành viên, vì vậy tốt hơn bạn nên đảm bảo rằng AutoMapper có ánh xạ cho các lớp thành viên mà bạn muốn sao chép sâu và không có ánh xạ cho các lớp thành viên mà bạn muốn sao chép nông.
Một giải pháp thay thế cho việc sử dụng AutoMapper sẽ là sử dụng một phương pháp sử dụng phản chiếu . (Lưu ý rằng mã trong liên kết là một bản sao cạn !)
"Hỗ trợ điền vào một đối tượng hiện có, thay vì AutoMapper tự tạo đối tượng đích" đã được thêm vào trong phiên bản AutoMapper 0.2 .