我是 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; }
}
Address 类如下所示:
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 进行这种映射? 有可能吗,还是我最好只使用常规映射代码?
您需要使用 AutoMapper 的 Custom Value Resolvers 功能。 因此,您需要设置一个自定义解析器,以使用 IsPreferredAddress 标志从列表映射到单个实体来查找它。
该文档对于自定义解析器来说非常好,因此您应该可以从那里弄清楚它。