使用AutoMapper创建映射时出错

问题描述 投票:0回答:1

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

AutoMapper为您创建了此类型映射,但无法使用当前配置映射您的类型Part - > PartDto(目标成员列表)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类中的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" });
}
entity-framework asp.net-core mapping automapper
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.