【问题标题】:Error when creating mappings with AutoMapper使用 AutoMapper 创建映射时出错
【发布时间】:2019-02-14 16:04:22
【问题描述】:

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

AutoMapper 为您创建了此类型映射,但您的类型无法使用当前配置进行映射 Part -> PartDto (Destination member list)PartManagement.Entities.Part -> PartManagement.Dto.PartDto (未映射的属性: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】:

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

    【讨论】:

      猜你喜欢
      • 2017-03-13
      • 2017-05-19
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多