Отображение в пункт назначения, который не существует в источнике, основанный на имени свойства с Automapper - PullRequest
1 голос
/ 25 августа 2010

Если у меня есть вложенный источник и место назначения, как это:

public class UserInformationViewModel
{
    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 PhysicalAddressViewModel BillingAddress { get; set; }
    public PhysicalAddressViewModel ShippingAddress { get; set; }
}

public class PhysicalAddressViewModel
{
    public string Line1 { get; set; }
    public string Line2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string PostalCode { get; set; }
    public string Country { get; set; }
}

public class UserInformation
{
    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 Type { get; set; }
    public string Line1 { get; set; }
    public string Line2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string PostalCode { get; set; }
    public string Country { get; set; }
}

И AddressType это перечисление, подобное этому:

public enum AddressType
{
    Billing = 1,
    Shipping = 2,
    Default = 3
};

И у меня есть настройки карт, как это:

CreateMap<UserInformationViewModel, UserInformation>();

CreateMap<PhysicalAddressViewModel, PhysicalAddress>();

Как я могу заставить autopper заполнить AddressType правильным перечислением на основе заполняемого свойства.Например, объект PhysicalAddress, который находится в UserInformation.BillingAddress, должен быть установлен в AddressType.Billing, а объект PhysicalAddress, который находится в UserInformation.ShippingAddress, должен быть установлен в AddressType.Shipping.

Я перепробовал все, что могподумайте, чтобы сделать эту работу, но мне не повезло.

1 Ответ

2 голосов
/ 25 августа 2010

Не уверен, что есть более простой способ, но как насчет чего-то вроде:

    Mapper.CreateMap<UserInformationViewModel, UserInformation>()
        .AfterMap((src,dst)=>dst.BillingAddress.Type = AddressType.Billing)
        .AfterMap((src,dst)=>dst.ShippingAddress.Type = AddressType.Shipping);

Вам также придется игнорировать отображение типов в PhysicalAddress

    Mapper.CreateMap<PhysicalAddressViewModel, PhysicalAddress>()
                .ForMember(dst=>dst.Type, opt=>opt.Ignore());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...