2011-11-09 33 views
8

Đây là nguồn của tôi:đồ Automapper từ lớp lồng nhau để duy nhất (flatten)

public class User 
{ 
    public int UserId { get; set; } 

    public Address Address { get; set; } 
} 

public class Address 
{ 
    public string Address { get; set; } 
    public string State {get; set; } 
} 

Đây là điểm đến của tôi:

public class UserVM 
{ 
    public int UserId { get; set; } 

    public string Address { get; set; } 
    public string State { get; set; } 
} 

Làm thế nào để làm các bản đồ? Bản đồ tạo bình thường không hoạt động khi họ nói làm phẳng là tự động.

Trả lời

15

Nếu bạn thay đổi tên thuộc tính lớp đích thành AddressStreetAddressState, theo quy ước, AutoMapper sẽ đối sánh chúng thành Address.StreetAddress.State trên nguồn.

public class UserVM 
{ 
    public int UserId { get; set; } 

    public string AddressStreet { get; set; } // User.Address.Street 
    public string AddressState { get; set; } // User.Address.State 
} 

Ngoài ra, bạn để lại tên thuộc tính điểm đến của bạn như là và sử dụng ánh xạ thành viên tùy chỉnh:

Mapper.CreateMap<User, UserVM>() 
    .ForMember(dest => dest.Street, opt => opt.MapFrom(src => src.Address.Street)) 
    .ForMember(dest => dest.State, opt => opt.MapFrom(src => src.Address.State)); 

Xem tài liệu AutoMapper cho ProjectionFlattening để biết thêm thông tin.

+1

Làm thế nào để thực hiện điều này? Điều gì sẽ xảy ra nếu tôi có Người dùng đó có con cũng có địa chỉ? –

+0

@Lolcoder, tôi không chắc chắn; Tôi không thấy bất kỳ giới hạn nào được đề cập trong tài liệu. Có thể là một câu hỏi mới cho một ai đó quen thuộc hơn với AutoMapper hơn tôi. –

+0

Có cách nào dễ dàng để làm ngược lại điều này với cùng một quy ước không? –

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