Я новичок в 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 после сопоставления. В сервисном вызове для объекта назначения он имеет правильное значение, которое я хочу сохранить, игнорируя его из источника.