Automapper 9.0 не игнорирует столбец при сопоставлении - PullRequest
0 голосов
/ 08 мая 2020

Я новичок в Automapper. Я столкнулся с проблемой при игнорировании сопоставления одного столбца в Automapper. Ниже мой исходный класс:

public class RequestPutFeedbackDto {
        public Guid Id { get; set; }
        public Guid TrainingDetailId { get; set; }
        public Guid ParameterId { get; set; }
        public string ParameterName { get; set; }
        [JsonIgnore]
        public Guid ParticipantId { get; set; }
        public int ParameterRating { get; set; }
        public string ExtrasComments { get; set; }
    }

и целевой класс:

public partial class ParticipantProgramFeedback
    {
        public Guid Id { get; set; }
        public Guid TrainingDetailId { get; set; }
        public Guid ParticipantId { get; set; }
        public Guid ProgramParameterId { get; set; }
        public int? ProgramParameterRating { get; set; }
        public bool? HasRelevantContent { get; set; }
        public bool? HasQualityContent { get; set; }
        public DateTime? CreatedDate { get; set; }
        public Guid? CreatedBy { get; set; }

        public virtual FeedbackUser Participant { get; set; }
        public virtual ProgramParameter ProgramParameter { get; set; }
        public virtual TrainingDetail TrainingDetail { get; set; }
    }

Мой C# Код:

public async Task<IActionResult> PutAsync([FromBody]List<RequestPutFeedbackDto> requestPutFeedbackDto) {
            if (ModelState.IsValid) {
                Guid participantId = GetCurrentUserId();
                Guid trainingDetailId = requestPutFeedbackDto.FirstOrDefault().TrainingDetailId;
                IEnumerable<ParticipantProgramFeedback> existingProgramFeedback = await _feedbackService.GetProgramFeedbackParameter(trainingDetailId, participantId);
                _mapper.Map(requestPutFeedbackDto, existingProgramFeedback);
            }
            return Ok();
        }

Фактическое сопоставление:

 CreateMap<RequestPutFeedbackDto, ParticipantProgramFeedback>()
            .ForMember(x => x.TrainingDetailId, y => y.MapFrom(z => z.TrainingDetailId))
            .ForMember(x => x.ProgramParameterId, y => y.MapFrom(z => z.ParameterId))
            .ForMember(x => x.ParticipantId, col => col.Ignore())
            .ForMember(x => x.ProgramParameterRating, y => y.MapFrom(z => z.ParameterRating));

Я хочу, чтобы свойство ParticipantId из класса ParticipantProgramFeedback игнорировалось, поскольку я извлекаю его из вызова службы и не хочу, чтобы этот параметр принимался из объекта Dto.

Я пробовал несколько вариантов игнорирования, например предварительное условие, AfterMap, BeforeMap.

Также пробовали с ForSourceMember с Ignore, ForMap с Ignore, ForSourceMember с DoNotValidate, но у меня ничего не работает.

Я даже пытался удалите столбец из объекта Dto, но это тоже не сработало.

Кто-нибудь может мне помочь.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация с моей стороны.

ПРИМЕЧАНИЕ. Во всех случаях ParticipantId отображается как пустой Guid после сопоставления. В сервисном вызове для объекта назначения он имеет правильное значение, которое я хочу сохранить, игнорируя его из источника.

...