2010-08-12 24 views
5

Soy nuevo en AutoMapper y tengo un problema que intento resolver.Asignación de la lista al objeto con AutoMapper

Si tengo una clase de origen de la siguiente manera:

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

Y la clase de dirección se ve así:

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

Mi clase de destino es:

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

Y el destino clase de dirección es:

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

} 

He establecido un mapeo:

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

Esto es trabajar por la pertenencia al UserInformationModel, pero ahora tengo que conseguir direcciones de trabajo. Sin embargo, una cosa importante a tener en cuenta es que el destino es una sola dirección de facturación y una única dirección de envío, mientras que en el modelo original, todas las direcciones se almacenan como una lista. La forma en que encuentra las direcciones de envío y facturación fuera de la lista es mirando RefAddressTypdId y IsPreferredAddress. Solo puede existir una dirección preferida con un RefAddressTypeId particular.

Entonces, mi pregunta es, ¿cómo consigues AutoMapper para hacer este tipo de mapeo? ¿Es posible, o será mejor que vaya con el código de mapeo normal?

+0

También tengo exactamente un problema similar. ¿Has encontrado la solución a tu problema? En caso afirmativo, ¿puedes compartirlo conmigo? No estoy familiarizado con CustomResolver. Si puede compartir algún ejemplo de su caso, sería muy útil. – Rupesh

Respuesta

6

Querrá utilizar la función Custom Value Resolvers de AutoMapper. Así que configuraría un Resolutor personalizado para mapear desde su lista a su entidad individual usando el indicador IsPreferredAddress para encontrarlo.

La documentación es bastante buena para los Resolvers personalizados, así que deberías estar bien averiguándote a partir de ahí.

Cuestiones relacionadas