2011-05-09 28 views
6

Với các nguồn sau:Automapper và lớp thứ bậc

public class SourceBase { public string TheString { get; set; } } 
public class SourceDerived : SourceBase { } 

và các điểm đến:

public class DestBase { public string MyString { get; set; } } 
public class DestDerived : DestBase { } 

Và lập bản đồ này:

CreateMap<SourceBase, DestBase>() 
    .ForMember(dest => dest.MyString, o => o.MapFrom(x => x.TheString)) 
    .Include<SourceDerived, DestDerived>(); 

    CreateMap<SourceDerived, DestDerived>(); 
    Mapper.AssertConfigurationIsValid(); // Exception is thrown here 

Tuy nhiên, điều này mang lại một lỗi lập bản đồ nói MyString isn không được ánh xạ trên DestDerived. Đưa cái gì? Tôi có thực sự cần phải lặp lại ánh xạ cho các thuộc tính lớp cơ sở trong tất cả các kiểu có nguồn gốc (tôi có nhiều hơn một lớp con trong mã thực tế của tôi).

EDIT:

Ngoại lệ chính xác là Các thuộc tính sau 1 trên DestDerived không thể được ánh xạ: MyString. Thêm biểu thức ánh xạ tùy chỉnh, bỏ qua hoặc đổi tên thuộc tính trên DestDerived.

+0

Lỗi chính xác là gì? –

Trả lời

0

Vui lòng kiểm tra bài đăng này: http://groups.google.com/group/automapper-users/browse_thread/thread/69ba514a521e9599

Nó hoạt động tốt nếu bạn khai báo nó như thế nào trong đoạn code dưới đây (sử dụng AutoMapper 1.1.0.188). Tôi không chắc chắn nếu điều này giải quyết vấn đề của bạn.

var result = Mapper.CreateMap<SourceBase, DestBase>() 
       .ForMember(dest => dest.MyString, o => o.MapFrom(x => x.TheString)); 
       //.Include<SourceDerived, DestDerived>(); 
      Mapper.CreateMap<SourceDerived, DestDerived>(); 
      var source = new SourceDerived(); 
      var destDerived = new DestDerived(); 
      source.TheString = "teststring"; 
      var mapResult = Mapper.Map<SourceBase, DestBase>(source, destDerived).MyString; 
      Console.WriteLine(mapResult); 
+0

Không có điều này không làm việc cho chúng tôi. Nó thực sự kỳ lạ quá rằng nếu bạn gọi Mapper.Map (nguồn, typeof (SourceDerived), typeof (DestDerived)) sau đó mã mẫu của bạn không thành công. Không có ngoại lệ, nhưng không có ánh xạ nào được thực hiện. – Andy

+0

Chúng tôi cũng đang gọi 'Mapper.AssertConfigurationIsValid()'. Tôi nghĩ bạn sẽ thấy rằng nếu bạn thêm cuộc gọi đó ngay sau khi bạn thiết lập ánh xạ của mình, bạn sẽ nhận được ngoại lệ được đề cập trong bài đăng của tôi. – Andy

+0

Cảm ơn nhận xét của bạn. Tôi xin lỗi tôi không thể giúp gì được! –

Các vấn đề liên quan