我尝试使用以下CreateMap()
:
Mapper.CreateMap<MyComplexType, string>()
.ConvertUsing(c => c.Name);
但是当我尝试使用此映射时,我收到以下错误:
键入&#39; System.String&#39;没有默认构造函数
这是有道理的,但我一直在阅读,据说这应该有效。还有什么我必须要做的吗?
答案 0 :(得分:1)
就我而言,我正在使用
.ProjectTo<>()
直接从DBContext集合(EF 6)投影到我的DTO,例如
db.Configuration.LazyLoadingEnabled = false;
prospects = db.Prospects.Where([my where lambda]).ProjectTo<ProspectDTO>().ToList();
目的地的IEnumerable<string>
属性来自M-M相关表格,即
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)));
N.B。我正在使用ProjectTo&lt;&gt;这样可以避免common lazy loading select n+1问题并确保对DB运行正常(快速)的SQL,并且我拥有所需的所有相关表数据。优秀。
谢谢Jimmy Bogard你摇滚明星!