带有可包含的 IQueryable 的自动映射器投影

问题描述 投票:0回答:1

我正在尝试使用 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

请问有什么帮助吗?

entity-framework automapper
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.