Ошибка при создании сопоставлений с automapper

Я пытаюсь сопоставить объекты с помощью AutoMapper. Я создал метод контроллера HTTP POST, который должен создать новый объект Part в базе данных. Он должен добавлять данные в обе сущности, Part и PartAvailabilites. База данных уже существует и поддерживается EF Core. Я получаю следующую ошибку:

AutoMapper created this type map for you, but your types cannot be mapped using the current configuration Part -> PartDto (Destination member list)PartManagement.Entities.Part -> PartManagement.Dto.PartDto (Unmapped properties:Balance)"

Кто-нибудь знает, в чем может быть проблема с этим маппингом? Я пробовал составить карту несколькими способами, но ни один из них не работает.

Вот мое отображение:

CreateMap<PartDto, PartEntity>()
    .ForMember(dest => dest.FkPartAvailability,
               opts => opts.MapFrom(src => new PartAvailabilities
               {
                   Balance = src.Balance
               }));

Пример запроса JSON:

{
    "name": "testPart",
    "catalogNumber": 12345,
    "balance": 10
}

Вот мои классы сущностей:

public class Part
{
    public long Id { get; set; }
    public int PartNumber { get; set; }
    public string Name { get; set; }
    public PartAvailabilities FkPartAvailability { get; set; }
}

public class PartAvailabilities
{
    public PartAvailabilities()
    {
        Parts = new HashSet<Part>();
    }

    public long Id { get; set; }
    public decimal Balance { get; set; }
    public ICollection<Part> Parts { get; set; }
}

public class PartDto
{
    public string Name { get; set; }
    public int PartNumber { get; set; }
    public decimal Balance { get; set; }
}

Это метод Создавать в классе ManagementService:

public async Task<PartDto> Create(PartDto request)
{
    var part = _mapper.Map<PartDto, PartEntity>(request);            
    var createdPart = partRepository.Add(part);
    await partRepository.UnitOfWork.SaveChangesAsync();
    return _mapper.Map<PartDto>(createdPart);
}

А вот метод HttpPost от контроллера:

[HttpPost]
public async Task<IActionResult> Part_Create([FromBody] PartDto request)
{
    PartDto createdPart;
    try
    {
        if (request != null)
        {
            createdPart = await _partManagementService.Create(request);
            return Ok(request);
        }
    }
    catch(Exception ex)
    {
        return BadRequest(ex.Message);
    }
    return Ok(new string[] { "Part created" });
}
0
0
363
1

Ответы 1

Сообщение пытается сообщить вам, что между Part и PartDto нет карты. AM создаст для вас карту, но эта карта недействительна, потому что PartDto.Balance не может быть сопоставлен. Итак, вам нужно создать карту и сообщить AM, как отображать Баланс. Это может быть легче понять, если вы установите для CreateMissingTypeMaps значение false.

Другие вопросы по теме