使用AutoMapper创建映射时出错

时间:2018-09-10 08:46:40

标签: entity-framework asp.net-core mapping automapper

我正在尝试使用AutoMapper映射对象。我已经创建了HTTP POST控制器方法,该方法应该为数据库创建新的Part对象。它应该将数据添加到Part和PartAvailabilites这两个实体中。数据库已经存在,并由EF Core支撑。我收到的错误是:

  

AutoMapper为您创建了此类型映射,但是无法使用当前配置Part-> PartDto(目标成员列表)PartManagement.Entities.Part-> PartManagement.Dto.PartDto(未映射的属性:平衡)来映射您的类型。“ < / p>

有人知道此映射可能是什么问题吗?我试图以几种方式进行映射,但是没有一种起作用。

这是我的映射:

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类中的 Create 方法:

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 :(得分:0)

该消息试图告诉您Part和PartDto之间没有映射。 AM将为您创建一个地图,但该地图无效,因为无法映射PartDto.Balance。因此,您必须创建地图并告诉AM如何映射天平。如果将CreateMissingTypeMaps设置为false,事情可能会更容易理解。