ฉันจะใช้ automapper เพื่ออัปเดตค่าคุณสมบัติของวัตถุอื่นโดยไม่ต้องสร้างใหม่ได้อย่างไร
ฉันจะใช้ automapper เพื่ออัปเดตค่าคุณสมบัติของวัตถุอื่นโดยไม่ต้องสร้างใหม่ได้อย่างไร
คำตอบ:
ใช้เกินที่ใช้ปลายทางที่มีอยู่:
Mapper.Map<Source, Destination>(source, destination);
ใช่มันจะส่งคืนวัตถุปลายทาง แต่เป็นเพียงสถานการณ์จำลองอื่น ๆ ที่คลุมเครือ มันเป็นวัตถุเดียวกัน
เพื่อให้งานนี้คุณต้อง CreateMap สำหรับประเภทของแหล่งที่มาและปลายทางแม้จะเป็นประเภทเดียวกัน หมายความว่าถ้าคุณต้องการ
Mapper.Map<User, User>(user1, user2);
คุณต้องสร้างแผนที่แบบนี้
Mapper.Create<User, User>()
หากคุณต้องการใช้วิธีการแบบอินสแตนซ์ของ 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
ที่ใช้ร่วมกัน ค่าของคุณสมบัติที่เป็นเอกลักษณ์จะยังคงเหมือนเดิม