【发布时间】: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