2010-08-12 9 views
5

Ich bin neu mit AutoMapper und habe ein Problem, das ich versuche zu lösen.Zuordnung von Liste nach Objekt mit AutoMapper

Wenn ich eine Quelle Klasse wie folgt:

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

und die Adresse der Klasse wie folgt aussieht:

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

Meine Zielklasse ist:

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

Und das Ziel Adressklasse ist:

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

} 

Ich habe eine Abbildung wie folgt aufgebaut:

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

Dies ist für die Mitgliedschaft in UserInformationModel arbeiten, aber jetzt muss ich arbeiten Adressen bekommen. Wichtig ist jedoch, dass das Ziel eine einzelne Rechnungsadresse und eine einzelne Lieferadresse ist, während im ursprünglichen Modell alle Adressen als Liste gespeichert sind. Die Suche nach den Versand- und Rechnungsadressen aus der Liste erfolgt über die RefAddressTypdId und die IsPreferredAddress. Mit einer bestimmten RefAddressTypeId kann nur eine bevorzugte Adresse vorhanden sein.

Also meine Frage ist, wie erhalten Sie AutoMapper, um diese Art der Zuordnung zu tun? Ist es möglich, oder gehe ich besser mit regulärem Mapping-Code vor?

+0

Ich habe auch genau das gleiche Problem. Haben Sie die Lösung Ihres Problems gefunden? Wenn ja, können Sie bitte mit mir teilen.iam, wie man CustomResolver benutzt. Wenn Sie ein Beispiel für Ihren Fall teilen können, wäre es sehr hilfreich. – Rupesh

Antwort

6

Sie möchten die Funktion Custom Value Resolvers von AutoMapper verwenden. Sie würden also einen benutzerdefinierten Resolver einrichten, um mithilfe der IsPreferredAddress-Markierung von Ihrer Liste zu Ihrer einzelnen Entität zu mappen.

Die Dokumentation ist ziemlich gut für die benutzerdefinierten Resolver, so dass Sie in Ordnung sein sollten, es von dort herauszufinden.

Verwandte Themen