我正在使用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以从其他集合中提取对象集合?