我正在尝试使用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" });
}
该消息试图告诉您Part和PartDto之间没有地图。 AM将为您创建一个地图,但该地图无效,因为无法映射PartDto.Balance。因此,您必须创建地图并告诉AM如何映射Balance。如果将CreateMissingTypeMaps设置为false,则可能更容易理解。