2010-08-12 4 views
5

Je suis nouveau avec AutoMapper et j'ai un problème que j'essaie de résoudre.Mappage de liste à objet avec AutoMapper

Si j'ai une classe source comme ceci:

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

Et la classe d'adresse ressemble à ceci:

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

Ma classe de destination est:

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

Et la destination la classe d'adresse est:

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

} 

J'ai mis en place une cartographie comme ceci:

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

Cela fonctionne à l'adhésion à UserInformationModel, mais maintenant je dois obtenir des adresses de travail. Une chose importante à noter, cependant, est que la destination est une seule adresse de facturation et une seule adresse de livraison tandis que dans le modèle original, toutes les adresses sont stockées sous forme de liste. La façon dont vous trouvez les adresses d'expédition et de facturation hors de la liste est en regardant RefAddressTypdId et IsPreferredAddress. Une seule adresse préférée peut exister avec un RefAddressTypeId particulier. Donc, ma question est, comment obtenez-vous AutoMapper faire ce genre de cartographie? Est-ce possible, ou est-ce que je préfère aller avec le code de mappage régulier?

+0

J'ai aussi exactement le même problème. Avez-vous trouvé la solution à votre problème? Si oui, pouvez-vous s'il vous plaît partager avec moi.iam ne pas savoir comment utiliser CustomResolver. Si vous pouvez partager quelques exemples de votre cas, ce serait très utile. – Rupesh

Répondre

6

Vous devez utiliser la fonctionnalité Custom Value Resolvers d'AutoMapper. Vous devez donc configurer un résolveur personnalisé pour mapper à partir de votre liste à votre entité unique à l'aide de l'indicateur IsPreferredAddress pour le trouver.

La documentation est assez bonne pour les résolveurs personnalisés, donc vous devriez bien comprendre à partir de là.

Questions connexes