使用Automapper的ProjectTo()扩展和转换器

时间:2017-10-18 18:32:31

标签: c# automapper

我正在尝试将源对象映射到DTO:

var queryable = GetDtoQueryable(); //IQueryable<DTO>
return _mapper //IMapper
    .Map<IQueryable<Source>,List<DTO>>(queryable);

这个问题是GetDtoQueryable()使用Entity Framework生成IQueryable,因此对Map()的调用是对集合中每个元素的四舍五入。解决这个问题应该很容易:

var queryable = GetDtoQueryable();
return queryable
    .ProjectTo<DTO>()
    .ToList();

然而,我发现这个映射主要是通过反射使用默认属性映射器,而不是单独建立的自定义转换器:

CreateMap<Source, DTO>()
    .ConvertUsing<SourceDtoConverter>();

public class SourceDtoConverter : ITypeConverter<Source, DTO>
{
    public DTO Convert(Source source, DTO dest, ResolutionContext context){ ... }
}

我需要ProjectTo()来调用此转换器。我猜这是不可能确保转换器不进行任何调用LinqToEntities无法执行,但我想知道是否有任何替代解决方案,可以避免往返,同时给我自定义转换器的功能。到目前为止,我一直在尝试用ForMember()方法替换它,但这实际上是对这个转换器的重写。

0 个答案:

没有答案