首页 > 解决方案 > 如何为子对象列表配置 AutoMapper,以及如何在查询中使用 ProjectTo<>?

问题描述

我有一个Template带有的模型,以及一个带有List<Symbol> symbols的等效 ViewModel 。当我查询 a时,似乎抛出了一个异常,我不知道为什么。TemplateJSList<SymbolJS>TemplateProjectTo<TemplateJS>

例外:“参数类型不匹配

我也想Include Symbol在我的查询中,但我也不完全确定如何映射该对象。这需要在单独的查询中完成吗?

任何帮助表示赞赏!谢谢!


楷模 :

public class Template
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<Exercise> Exercises { get; set; }
        public List<Symbol> Symbols { get; set; }
    }

public class Symbol
    {
        public int Id { get; set; }
        public int TemplateId { get; set; }
        public Template Template { get; set; }
        public char Letter { get; set; }
        public string ImgSource { get; set; }
    }

public class TemplateJS
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<SymbolJS> Symbols { get; set; }
    }

public class SymbolJS
    {
        public char Letter { get; set; }
        public string ImgSrc { get; set; }
    }

自动映射器:

CreateMap<Template, TemplateJS>()                
            .ReverseMap();

            CreateMap<Symbol, SymbolJS>()
            .ReverseMap();

询问 :

public async Task<TemplateJS> GetTemplateAsync(int Id)
        {
            try
            {

                var q = await _dbContext.Template
                                 //   .Include(x => x.Symbols)
                                .Where(x => x.Id == Id)
                                .ProjectTo<TemplateJS>(_mapper.ConfigurationProvider)
                                .SingleOrDefaultAsync();
                 return q;

            }
            catch (Exception e)
            {
                throw e;
            }
        }

标签: linqasp.net-coreautomapper

解决方案


推荐阅读