Automapper可查询多对多关系

时间:2018-05-06 13:16:22

标签: c# entity-framework mapping automapper iqueryable

我正在使用AutoMapper 6.1.1(最新稳定版),我正在与M:N关系进行映射。在数据库模式以及实体中,还有左表L,右表R和关联表A.对应的类A包含L.id,L,R.id和R - ID和导航属性。 L类包含A的集合.EF with EF效果很好,没有错误。

从服务器我想要返回某种LDto - 它包含来自L的信息和一组Rs。所以我想要做的是从所有A实例中提取R属性并将它们传递给结果DTO。

目前我正在使用这种方式:

 config.CreateMap<L, LDto>()
            .ForMember(dto => dto.Rs,
                opt => opt.MapFrom(x => x.As.Select(a => a.R)));

服务逻辑中的某处有类似的东西:

 lData.Where(l => l.code == "Code").Include(l => l.As.Select(....)).ProjectTo<LDto>;

如果到处都有数据,Include用于定义的映射,它可以正常工作。但是,无法保证在我想加载嵌套结构的所有情况下都存在任何关联实例A,并且响应中的null可用于这些目的。

在这种情况下(或者我认为是因为缺少数据)我得到了这个错误:

 Value cannot be null.
 Parameter name: source

我试过这个(简化):

 var queryable = getData(); //OK
 var list = queryable.ToList(); //OK
 var result = list.AsQueryable().ProjectTo<LDto>() --error mentioned above

如果无法保证源集合不为空,我如何处理设置automapper以从其他集合中提取对象集合?

0 个答案:

没有答案