Automapper-Map для строки
Я попытался создать сопоставление для строки с помощью следующего CreateMap()
:
Mapper.CreateMap<MyComplexType, string>()
.ConvertUsing(c => c.Name);
Но когда я пытаюсь использовать это отображение, я получаю следующую ошибку:
Тип 'System.String' не имеет конструктора по умолчанию
Это имеет смысл, но я читал вокруг, и якобы это должно сработать. Есть ли что-то еще, что я должен сделать?
1 ответ
В моем случае я использовал
.ProjectTo<>()
Для прямого проецирования из коллекции DBContext (EF 6) в мой DTO, например
db.Configuration.LazyLoadingEnabled = false;
prospects = db.Prospects.Where([my where lambda]).ProjectTo<ProspectDTO>().ToList();
С пунктом назначения с IEnumerable<string>
свойство, поступающее из связанной таблицы MM, т.е.
public class ProspectDTO
{
public IEnumerable<string> Brands { get; set; }
}
и мое решение отображалось следующим образом
AutoMapper.Mapper.CreateMap<Prospect, ProspectDTO>().ForMember(dest => dest.Brands, opts => opts.MapFrom(src => src.Brands.Select(b => b.Name)));
NB Я использую ProjectTo<>, как это, чтобы избежать общей проблемы отложенной загрузки select n+1 и обеспечить приличный (быстрый) запуск sql для БД, и у меня есть все необходимые данные таблицы, которые мне нужны. Отлично.
Спасибо, Джимми Богард, ты рок-звезда!!!