AutoMapper ProjectTo:不使用嵌套对象

时间:2017-10-24 08:41:30

标签: c# linq automapper

我有以下dto:

public class SingleForm
{
    // other props left out for brevity

    public List<Filter> Filters { get; set; }
}

然后尝试将其映射到AutoMapper,如下所示:

CreateMap<Form, SingleForm>()
    .ForMember(dest => dest.Filters, 
        opts => opts.MapFrom(src => 
            Mapper.Map<List<Filter>>(src.Questions)));

CreateMap<FormQuestion, Filter>()
    .ForMember(dest => dest.Header, 
        opts => opts.MapFrom(src => src.Question.QuestionText));

然后我使用ProjectTo:

var query = this.context.Forms
    .Where(e => e.Id == message.FormId)
    .ProjectTo<SingleForm>()
    .FirstOrDefault();

但是,当我执行查询时,我的过滤器集合为空。

当我尝试使用LINQ手动映射集合时,如下所示,它可以正常工作,所以我想知道我做错了什么?

var query = this.context.Forms
    .Where(e => e.Id == message.FormId)
    .Select(e => new SingleForm
    {
        Id = e.Id,
        Filters = e.Questions.Select(q =>
            new Filter { 
                Header = q.Question.QuestionText 
        }).ToList()
    })
    .FirstOrDefault();

2 个答案:

答案 0 :(得分:2)

一般来说,我认为最好避免在配置文件配置中调用Mapper.Map()。考虑到这一点,我认为将您的第一个映射更改为以下内容可能有所帮助:

res

答案 1 :(得分:0)

如果映射发生在DbContext旁边那么应该使用includes方法来检索所有关系项,这些项可以在没有DbContext的情况下延迟加载。