我正在尝试使用 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
请问有什么帮助吗?
我设法解决了这个问题。 使用投影时不再需要包含(如 Automapper 文档中所示)。 自定义解析器被替换为集合中的 select 语句,自定义解析器禁止在 AutoMapper 中对 IQueryable 使用投影。