2010-08-12 35 views
5

Tôi mới sử dụng AutoMapper và gặp sự cố tôi đang cố giải quyết.Lập bản đồ từ danh sách xuống đối tượng với AutoMapper

Nếu tôi có một lớp nguồn như thế này:

public class Membership 
{ 
    public int MembershipId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string OrganizationName { get; set; } 
    public List<Address> Addresses { get; set; } 
} 

Và lớp Địa chỉ trông như thế này:

public class Address 
{ 
    public int AddressId{ get; set; } 
    public int RefAddressTypeId { get; set; } 
    public string AddressLine1 { get; set; } 
    public string AddressLine2 { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Zip { get; set; } 
    public bool IsPreferredAddress { get; set; } 
} 

lớp điểm đến của tôi là:

public class UserInformationModel 
{ 
    public string UserName { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Organization { get; set; } 
    public string EmailAddress { get; set; } 
    public PhysicalAddress BillingAddress { get; set; } 
    public PhysicalAddress ShippingAddress { get; set; } 
} 

Và điểm đến lớp địa chỉ là:

public class PhysicalAddress 
{ 
    public AddressType AddressType{get; set;} 
    public string AddressLine1 { get; set; } 
    public string AddressLine2 { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string PostalCode { get; set; } 

} 

tôi đã thiết lập một bản đồ như thế này:

Mapper.CreateMap<MinistryMattersIntegration.BusinessObjects.Entities.Cokesbury.Membership, UserInformationModel>() 
     .ForMember(dest => dest.Organization, opt => opt.MapFrom(src=>src.OrganizationName)); 

này đang làm việc cho thành viên để UserInformationModel, nhưng bây giờ tôi cần phải nhận được địa chỉ làm việc. Tuy nhiên, một điều quan trọng cần lưu ý là đích đến là một địa chỉ thanh toán duy nhất và một địa chỉ giao hàng duy nhất trong khi ở mô hình ban đầu, tất cả địa chỉ được lưu trữ dưới dạng danh sách. Cách bạn tìm thấy địa chỉ giao hàng và thanh toán ngoài danh sách là bằng cách xem RefAddressTypdId và IsPreferredAddress. Chỉ có một địa chỉ ưa thích có thể tồn tại với một RefAddressTypeId cụ thể.

Vì vậy, câu hỏi của tôi là, làm cách nào để AutoMapper thực hiện loại ánh xạ này? Có thể, hoặc tôi tốt hơn chỉ cần đi với mã lập bản đồ thường xuyên?

+0

Tôi cũng có vấn đề tương tự. Bạn đã tìm thấy giải pháp cho vấn đề của mình chưa? Nếu có thì bạn có thể vui lòng chia sẻ với tôi.iam không nhận được cách sử dụng CustomResolver. Nếu bạn có thể chia sẻ một số ví dụ cho trường hợp của bạn, nó sẽ rất hữu ích. – Rupesh

Trả lời

6

Bạn sẽ muốn sử dụng tính năng Custom Value Resolvers của AutoMapper. Vì vậy, bạn sẽ thiết lập Trình giải quyết tùy chỉnh để ánh xạ từ danh sách của bạn sang thực thể duy nhất bằng cờ IsPreferredAddress để tìm nó.

Tài liệu này khá tốt cho Trình giải quyết tùy chỉnh, do đó bạn nên tìm ra nó từ đó.

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