具有Includable IQuerable的自动映射投影

时间:2018-04-27 21:16:20

标签: entity-framework automapper

我正在尝试使用AutoMapper将包含项目的数据库实体投影到另一个域实体

      IQueryable<DBTypeEntity> allItems = _dbContext.DBType.Include(e => e.A)
            .Include(e => e.B)
                .ThenInclude(e => e.C)
            .Include(e => e.D)
                .ThenInclude(ac => ac.E);

使用投影

              var result = allItems.ProjectTo<DBTypeDomain>(_typeMapper.ConfigurationProvider);

以下是我的映射:

        CreateMap<DBTypeEntity, DBTypeDomain>()
            .ForMember(e => e.A, opt => opt.Ignore())
            .ForMember(e => e.B, opt => opt.MapFrom(e => e.B))
            .ForMember(e => e.C, opt => opt.MapFrom(e => e.C))
            .ForMember(e => e.E, opt => opt.MapFrom(e => e.E))
            .ForMember(e => e.F, opt => opt.ResolveUsing<FResolver, ICollection<AssociatedFEntity>>(e => e.AssociatedFs))
            .ForMember(e => e.G, opt => opt.MapFrom(e => e.G));

其他类型是属性映射的直接属性,没有什么特别之处。 我为类型映射器设置了所有必需的配置文件映射,但是,我得到了一个神秘的异常(无法将其解析为可查询表达式)。 我正在使用EF Core 2.0和Automapper 6.2.2

请帮忙吗?

1 个答案:

答案 0 :(得分:0)

我成功解决了这个问题。 使用投影时不再需要包含(如Automapper Docs中所示)。 自定义解析器被替换为集合中的select语句,自定义解析器禁止在AutoMapper中为IQueryable使用投影。