2013-03-21 8 views
22

tôi đang cố gắng để ánh xạ đối tượng với các thành viên đa cấp: đây là những lớp học:AutoMapper - lập bản đồ độ sâu

public class Father 
    { 
     public int Id { get; set; } 
     public Son Son { get; set; } 
    } 

    public class FatherModel 
    { 
     public int Id { get; set; } 
     public int SonId { get; set; } 
    } 

    public class Son 
    { 
     public int Id { get; set; } 
    } 

này là làm thế nào tôi cố gắng AutoMap nó:

AutoMapper.Mapper.CreateMap<FatherModel , Father>() 
         .ForMember(dest => dest.Son.Id, opt => opt.MapFrom(src => src.SonId)); 

đây là ngoại lệ mà tôi nhận được:

'Biểu thức' => Chuyển đổi (dest.Son.Id) 'phải giải quyết thành cấp cao nhất thành viên d không phải bất kỳ thuộc tính nào của đối tượng con. Sử dụng trình phân giải tùy chỉnh trên loại con hoặc tùy chọn AfterMap thay thế. Tên tham số: LambdaExpression

Cảm ơn

Trả lời

30

này sẽ làm việc cho cả bản đồ để một mới hoặc cho một đối tượng hiện có.

Mapper.CreateMap<FatherModel, Father>() 
    .ForMember(x => x.Son, opt => opt.MapFrom(model => model)); 
Mapper.CreateMap<FatherModel, Son>() 
    .ForMember(x => x.Id, opt => opt.MapFrom(model => model.SonId)); 
+3

Phần quan trọng của câu trả lời này là ánh xạ của tài sản Sơn với mô hình, đó là những gì buộc việc sử dụng các ánh xạ thứ hai (dòng 2). – Steve

0

trùng lặp từ: https://stackoverflow.com/a/8944694/1586498

Mapper.CreateMap<DomainClass, Child>(); 
Mapper.CreateMap<DomainClass, Parent>() 
    .ForMember(d => d.Id, opt => opt.MapFrom(s => s.Id)) 
    .ForMember(d => d.A, opt => opt.MapFrom(s => s.A)) 
    .ForMember(d => d.Child, 
      opt => opt.MapFrom(s => Mapper.Map<DomainClass, Child>(s))); 

Nhờ: @justin-niessner