Как настроить AutoMapper для списка подобъектов и как использовать ProjectTo <> в запросе? - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть модель Template с List<Symbol> symbols и эквивалентная ViewModel TemplateJS с List<SymbolJS>. Когда я запрашиваю Template, ProjectTo<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; }
    }

AutoMapper:

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;
            }
        }
...