Я использую AutoMapper и у меня есть некоторые проблемы. Например:
Типы источников
class CommonInfo
{
public int Id {get; set;}
public string Name {get; set;}
}
class AdvanceInfo
{
public string Description {get; set;}
}
class Source
{
public CommonInfo Common {get; set;}
public AdvancedInfo Advance {get; set;}
}
Типы назначений
class Destination
{
public FullDestinationInfo Info {get; set;}
}
class FullDestinationInfo
{
public int Id {get; set;}
public string Name {get; set;}
public string Description {get; set;}
}
Использование AutoMapper
IQueryable<Source> srcQuery = GetSourceQuery();
Destination dest = srcQuery.ProjectTo<Destination>().First();
Конфигурация AutoMapper
CreateMap<CommonInfo, FullDestinationInfo>() // CommonInfo without Description member
CreateMap<Source, Destination>() // Main Source and Destination types
.ForMember(dest => dest.Info, opt => opt.MapFrom(src => src.Common)) // <== it`s working!
// Fill Description member from Source.Advance
.ForMember(dest => dest.Info.Description, opt => opt.MapFrom(src => src.Advance.Description)); // <== not working :(
Исключение: выражение 'dest => dest.Info.Description' должно разрешаться для элемента верхнего уровня, а не для свойств любого дочернего объекта. Вместо этого вы можете использовать ForPath, пользовательский распознаватель для дочернего типа или параметр AfterMap.
Я пытаюсь использовать ForPath и AfterMap, но безрезультатно. Исключение исчезает, но свойство не отображается и остается по умолчанию