Automapper.ProjectTo() выдает исключение с нулевой ссылкой

#entity-framework-core #automapper #ef-core-3.1 #automapper-10

#сущность-структура-ядро #автоматический преобразователь #ef-core-3.1 #автоматический преобразователь-10

Вопрос:

У меня есть следующее отображение :

         CreateMap<PeopleForm, FormDto>()
            .ForMember(des => des.Code, src => src.MapFrom(s => s.Code))
            .ForMember(des => des.Notes, src => src.MapFrom(s => s.FormNotes))
            //other mappings removed for breivity
            ;

        CreateMap<FormNote, NoteDto>()
            .ForMember(x => x.Note, cfg => cfg.MapFrom(y => y.Note));
 

и я хочу задать этот вопрос :

         var query = _context.PeopleForms.Where(i => i.Id == id);
        var form = await _mapper.ProjectTo<FormDto>(query).FirstOrDefaultAsync();-->NullReferenceException
 

но это работает, когда я комментирую отображение из FormNotes в Notes:

         CreateMap<PeopleForm, FormDto>()
            .ForMember(des => des.Code, src => src.MapFrom(s => s.Code))
            //.ForMember(des => des.Notes, src => src.MapFrom(s => s.FormNotes))--> this line is the problem
             ;
 

и обходное решение, которое я придумал, состояло в том, чтобы выбрать в сопоставлении:

                 .ForMember(des => des.Notes, src => src.MapFrom(s => s.FormNotes.Select(n=> new 
                 NoteDto{Note = n.Note})))
 

я проверил журналы, и, похоже, проблема связана в основном с Ef core :

              Microsoft.EntityFrameworkCore.Query: Error: An exception occurred while iterating over 
             the results of  a query for context type 'Backend.Infrastructure.MolsaContext'.
 

Что мне делать ? У меня есть точное сопоставление с другой таблицей (сущностью), и оно работает без проблем, единственная проблема связана с этим конкретным сопоставлением.

что я упускаю из виду? связано ли это с AutoMapper или Ef core?

Ответ №1:

Таким образом, это было неправильным с моей стороны, имена свойств навигации для FormNote и NoteDto, где то же самое, что вызвало значение null .

 CreateMap<FormNote, NoteDto>()
.ForMember(x => x.Note, cfg => cfg.MapFrom(y => y.Note))
.ForMember(x => x.LastModifiedAt, cfg => cfg.MapFrom(y => y.LastModifiedById != null ? y.ModifiedDate.Value.ToString("yyyy-MM-dd HH:m:s") : null))
.ForMember(x => x.CreatedAt, cfg => cfg.MapFrom(y => y.CreatedDate.ToString("yyyy-MM-dd HH:m:s")))

.ForMember(x => x.CreatedBy, cfg => cfg.MapFrom(y => y.CreatedBy.FullName))
.ForMember(x => x.LastModifiedBy, cfg => cfg.MapFrom(y => y.LastModifiedById != null? y.LastModifiedBy.FullName : null));