Ошибка при создании сопоставлений с AutoMapper - PullRequest
0 голосов
/ 10 сентября 2018

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

AutoMapper создал эту карту типов для вас, но ваши типы не могут быть отображены с использованием текущей конфигурации 1004 *

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

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

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" });
}

1 Ответ

0 голосов
/ 10 сентября 2018

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

...