假设我有两个模型类:
public class People { public string FirstName {get;set;} public string LastName {get;set;} }
还有一个班级的电话:
public class Phone { public string Number {get;set;} }
我想这样转换为PeoplePhoneDto:
public class PeoplePhoneDto { public string FirstName {get;set;} public string LastName {get;set;} public string PhoneNumber {get;set;} }
假设在我的控制器中,我有:
var people = repository.GetPeople(1); var phone = repository.GetPhone(4); // normally, without automapper I would made return new PeoplePhoneDto(people, phone) ;
我似乎找不到这种情况的任何示例。这可能吗 ?
注意:仅针对此问题,示例不是真实的。
您无法直接将多个源映射到单个目标- 您应按照安德鲁·惠特克(Andrew Whitaker)的回答中的说明,一一应用地图。因此,您必须定义所有映射:
Mapper.CreateMap<People, PeoplePhoneDto>(); Mapper.CreateMap<Phone, PeoplePhoneDto>() .ForMember(d => d.PhoneNumber, a => a.MapFrom(s => s.Number));
然后通过这些映射中的任何一个创建目标对象,并将其他映射应用于创建的对象。并且可以通过非常简单的扩展方法来简化此步骤:
public static TDestination Map<TSource, TDestination>( this TDestination destination, TSource source) { return Mapper.Map(source, destination); }
用法很简单:
var dto = Mapper.Map<PeoplePhoneDto>(people) .Map(phone);