2010-08-12 3 views
5

Я новичок в AutoMapper и имею проблему, которую я пытаюсь решить.Сопоставление от списка до объекта с помощью AutoMapper

Если у меня есть класс источника, как это:

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; } 
} 

А класс Адреса выглядит следующим образом:

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; } 
} 

Мой класс назначение:

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; } 
} 

И назначение адресный класс:

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; } 

} 

Я настроил отображение, как это:

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

Это работает на членство в UserInformationModel, но теперь мне нужно получить адрес работающим. Следует отметить, однако, что назначение - это один адрес фактурирования и один адрес доставки в исходной модели, все адреса хранятся в виде списка. То, как вы находите адреса доставки и выставления счетов из списка, - это просмотр RefAddressTypdId и IsPreferredAddress. Только один предпочтительный адрес может существовать с определенным RefAddressTypeId.

Итак, мой вопрос в том, как вы получаете AutoMapper для такого отображения? Возможно ли, или мне лучше просто идти с регулярным кодом сопоставления?

+0

У меня также есть аналогичная проблема. Вы нашли решение своей проблемы? Если да, то можете ли вы, пожалуйста, поделиться со мной. Я не получаю, как использовать CustomResolver. Если вы можете поделиться некоторыми примерами по вашему делу, это будет очень полезно. – Rupesh

ответ

6

Вы хотите использовать функцию AutoMapper Custom Value Resolvers. Таким образом, вы настроили Custom Resolver для отображения из своего списка в единую сущность, используя флаг IsPreferredAddress, чтобы найти его.

Документация очень хороша для пользовательских резольверов, поэтому вы должны быть в курсе, что это будет оттуда.

Смежные вопросы