Отображение из списка вниз на объект с AutoMapper - PullRequest
5 голосов
/ 12 августа 2010

Я новичок в 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; }
}

И класс Address выглядит так:

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 выполнять такое отображение? Возможно ли это, или мне лучше просто использовать обычный код отображения?

1 Ответ

7 голосов
/ 16 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...