2010-08-12 225 views
5

我是新的AutoMapper,并有一个问题,我试图解决。从列表映射到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; } 
} 

和地址类看起来是这样的:

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做这种映射?是否有可能,还是我更适合使用常规的映射代码?

+0

我也有完全类似的问题。你有没有找到你的问题的解决方案?如果是,那么你可以请与我分享。我不知道如何使用CustomResolver。如果你能分享一些你的案例,这将是非常有益的。 – Rupesh 2013-10-08 13:51:45

回答

6

你会想要使用AutoMapper的Custom Value Resolvers功能。因此,您需要设置一个自定义解析器,使用IsPreferredAddress标志将您的列表映射到您的单个实体。

该文档对于自定义分解器非常有用,因此您应该很好地从中找出它。

相关问题