2015-11-27 12 views
8

Tôi có một số mã lập bản đồ như sauTrong AutoMapper bạn có thể áp dụng giải quyết cùng một giá trị cho nhiều thành viên

Mapper.CreateMap<CalculationQueryResult, CalculationViewModel>() 
     .ForMember(poco => poco.NomineeFee, 
        opt => opt.ResolveUsing<FormattedCurrencyInt>() 
     .FromMember(m => m.NomineeFee)) 

     .ForMember(poco => poco.TotalContributions, 
        opt => opt.ResolveUsing<FormattedCurrencyInt>() 
     .FromMember(m => m.TotalContributions)) 

     .ForMember(poco => poco.EquityInjection, 
        opt => opt.ResolveUsing<FormattedCurrencyInt>() 
     .FromMember(m => m.EquityInjection)) 

    // ... SNIP Lots more members mapped with Formatted Currency Resolver 

Như bạn có thể thấy tôi đang lập bản đồ nhiều thành viên bằng cách sử dụng phân giải tương tự để chuyển đổi một số nguyên với một loại tiền được định dạng chuỗi. Tôi đang làm điều này cho đại đa số nhưng không phải tất cả các thành viên trong lớp poco của tôi.

Tất cả các thành viên này sẽ ánh xạ sử dụng ánh xạ dựa trên quy ước nếu tôi không cần lặp lại các loại này. Đó là một số lượng lớn mã để viết cho một nhiệm vụ đơn giản.

Có cách nào để ghi đè hành vi mặc định để chuyển đổi int thành chuỗi cho một bản đồ hay không và sau đó tùy chỉnh .Những người bạn ở nơi tôi muốn điều gì đó khác. Như thế này:

Mapper.CreateMap<CalculationQueryResult, CalculationViewModel>() 
      .SetDefault<int,string>(opt => opt.ResolveUsing<FormattedCurrencyInt>()) 
      .ForMember(poco => poco.Count, x=>x.MapFrom(s => s.Count.ToString())); 

Trả lời

-1

Bạn không thể áp dụng cùng một trình giải quyết giá trị cho nhiều thành viên theo cách được mô tả.

Nó có thể ghi đè lên ánh xạ mặc định từ int đến chuỗi cho tất cả ánh xạ, theo đề xuất của Georg Patscheider nhưng điều này có thể có tác dụng phụ tồi tệ hơn so với vấn đề ban đầu.

Bạn sẽ phải viết từng dòng bản đồ.

+1

Vui lòng sử dụng liên kết chỉnh sửa trên câu hỏi của bạn để thêm thông tin bổ sung. Nút Trả lời Bài đăng chỉ nên được sử dụng cho các câu trả lời hoàn chỉnh cho câu hỏi. - [Từ đánh giá] (/ đánh giá/bài đăng chất lượng thấp/10488443) –

+0

Đôi khi câu trả lời là "điều đó là không thể". Câu trả lời này không thêm bất cứ điều gì thêm vào câu hỏi của tôi. Câu trả lời khác được cung cấp cũng không trả lời câu hỏi của tôi. – Twisted

+1

Vậy tại sao bạn đăng câu trả lời nếu nó không thêm gì? Một số người trong chúng ta ở đây sẽ xem xét các câu trả lời có chất lượng thấp và đưa ra nhận xét về họ. Đó là một phần của cách trang web này hoạt động, nơi tôi đề nghị đưa vào một số giải thích hoặc biện minh cho lý do tại sao bạn nghĩ rằng nếu không nó chỉ là một ý kiến ​​và tất cả mọi người sẽ có một trong những người. "Tôi nghĩ rằng tôi có thể bay" sẽ là một cái gì đó mà tôi có thể nhà nước và không thêm nhiều hơn để nó có thể là đúng hoặc sai. Nếu tôi đang ở trên một chiếc trực thăng hay máy bay thì tôi cũng có thể bay tốt trong khi nếu tôi cố gắng vung tay để bay không hoạt động tốt như vậy thì đó là lý do tại sao. –

4

Bạn có thể tạo các bản đồ mặc định như

Mapper.CreateMap<int, string>().ConvertUsing<FormattedCurrencyIntConverter>(); 

private class FormattedCurrencyIntConverter : TypeConverter<int, string> { 
    protected override string ConvertCore(int numericValue) { 
     return numericValue.ToString("C2"); // format here ... 
    } 
} 

Nhưng hãy cẩn thận rằng quy tắc lập bản đồ này sẽ được áp dụng cho tất cả các số nguyên! Việc ghi đè quy tắc này cho một số thành viên nhất định có thể xảy ra, nhưng tôi đã không kiểm tra quy tắc đó.

PS: Tôi khuyên bạn nên ghi lại tất cả các quy tắc ánh xạ một cách rõ ràng và không dựa vào ánh xạ dựa trên quy ước. Nếu một thuộc tính được đổi tên chỉ ở một bên, thì các quy tắc ánh xạ dựa trên quy ước, nhưng một quy tắc rõ ràng có thể được tự động tái cấu trúc bởi IDE.

+1

Cảm ơn bạn đã đăng câu trả lời, như bạn nói sẽ áp dụng chuyển đổi cho mọi Bản đồ không thực sự giúp tôi. Tôi muốn áp dụng nó vào một bản đồ cụ thể. – Twisted

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