2010-08-04 17 views
8

Có thể cấu hình AutoMapper để trả về một thể hiện mới của kiểu đích nếu đối tượng nguồn là null không?AutoMapper: tạo thể hiện kiểu đích nếu source == null

Source source = null; 
Dest d1 = AutoMapper.Mapper.Map<Source, Dest>(source); 
// d1 == null 

// I'm looking for a way to configure AutoMapper to 
// eliminate this code: 
Dest d2 = AutoMapper.Mapper.Map<Source, Dest>(source) ?? new Dest(); 
+0

bọc nó trong một phương pháp hay một cái gì đó – Omu

Trả lời

15

Trả lời câu hỏi của riêng tôi (một phần):

AutoMapper có một tài sản cấu hình tên AllowNullDestinationValues được thiết lập để true theo mặc định. Bằng cách thiết lập này để false, tôi nhận được các hành vi thể hiện trong câu hỏi, ví dụ:

Mapper.Configuration.AllowNullDestinationValues = false; 

//... 

Source source = null; 
Dest d = AutoMapper.Mapper.Map<Source, Dest>(source); 
// d is now a new instance of Dest 

Giải pháp này hoạt động OK với nhiều loại đơn giản, nơi nguồn và đích loại bản đồ tốt. Tôi vẫn có một số vấn đề với ánh xạ phức tạp (tôi sẽ cập nhật câu hỏi để hiển thị một ví dụ).

2

Bạn cũng có thể sử dụng .NullSubstitute() để thay thế giá trị NULL để một số giá trị tùy chỉnh cho bất cứ tài sản trong Automapper, ví dụ .:

CreateMap<SMModel, VM_SMModel>() 
        .ForMember(d => d.myDate, o => o.NullSubstitute(new DateTime(2017,12,12))); 
Các vấn đề liên quan