Ви можете використовувати Tuple
для цього:
Mapper.CreateMap<Tuple<People, Phone>, PeoplePhoneDto>()
.ForMember(d => d.FirstName, opt => opt.MapFrom(s => s.Item1.FirstName))
.ForMember(d => d.LastName, opt => opt.MapFrom(s => s.Item1.LastName))
.ForMember(d => d.Number, opt => opt.MapFrom(s => s.Item2.Number ));
Якщо у вас буде більше вихідних моделей, ви можете використовувати інше подання (Список, Словник чи щось інше), яке буде збирати всі ці моделі разом як джерело.
Вищезазначений код слід переважно розмістити в якомусь файлі AutoMapperConfiguration, встановити один раз і в усьому світі, а потім використовувати, коли це застосовно.
AutoMapper за замовчуванням підтримує лише одне джерело даних. Отже, немає можливості встановити безпосередньо кілька джерел (без загортання в колекцію), бо як тоді ми могли б знати, що у випадку, якщо, наприклад, дві моделі джерел мають властивості з однаковими іменами?
Для досягнення цього є певні шляхи вирішення:
public static class EntityMapper
{
public static T Map<T>(params object[] sources) where T : class
{
if (!sources.Any())
{
return default(T);
}
var initialSource = sources[0];
var mappingResult = Map<T>(initialSource);
if (sources.Count() > 1)
{
Map(mappingResult, sources.Skip(1).ToArray());
}
return mappingResult;
}
private static void Map(object destination, params object[] sources)
{
if (!sources.Any())
{
return;
}
var destinationType = destination.GetType();
foreach (var source in sources)
{
var sourceType = source.GetType();
Mapper.Map(source, destination, sourceType, destinationType);
}
}
private static T Map<T>(object source) where T : class
{
var destinationType = typeof(T);
var sourceType = source.GetType();
var mappingResult = Mapper.Map(source, sourceType, destinationType);
return mappingResult as T;
}
}
І потім:
var peoplePhoneDto = EntityMapper.Map<PeoplePhoneDto>(people, phone);
Але, чесно кажучи, хоча я вже кілька років використовую AutoMapper, мені ніколи не було необхідності використовувати картографування з кількох джерел. У випадках, коли, наприклад, мені потрібні були кілька бізнес-моделей у моїй єдиній моделі перегляду, я просто вбудовував ці моделі в клас моделі представлення.
Тож у вашому випадку це буде виглядати так:
public class PeoplePhoneDto {
public People People { get; set; }
public Phone Phone { get; set; }
}