[英]AutoMapper Asp.Net Core 2: Unmapped Properties
When trying to map my Dto to my model, I am getting an error that certain properties are not being mapped. 尝试将Dto映射到模型时,出现错误,提示某些属性未映射。
Unmapped properties: 未映射的属性:
Id ID
AddressId AddressId
ContactId 使用ContactID
Barns 谷仓
Gateways 网关
UserFarms UserFarms
But the Id is supposed to be auto-generated, the AddressId, ContactId, and Barns are nullable properties. 但是应该假定ID是自动生成的,所以AddressId,ContactId和Barns是可为空的属性。
The issue occurs when I get to var farmToCreate = _mapper.Map<Farm>(farmForCreateDto);
当我进入var farmToCreate = _mapper.Map<Farm>(farmForCreateDto);
时,就会发生此问题var farmToCreate = _mapper.Map<Farm>(farmForCreateDto);
within the controller. 在控制器内。
It tries to log the user activity which runs a
SaveChangesAsync
on the database, and, at that point, throws an error that it can't map the Farm Dto to its Model due to unmapped properties.
它尝试记录在数据库上运行
SaveChangesAsync
的用户活动,并且此时抛出错误,由于未映射的属性,它无法将Farm Dto映射到其Model。
[ServiceFilter(typeof(LogUserActivity))]
[Authorize]
[Route("api/[controller]")]
public class FarmsController : Controller
{
private readonly IBaseRepository _repo;
private readonly IMapper _mapper;
public FarmsController(IBaseRepository repo, IMapper mapper)
{
_mapper = mapper;
_repo = repo;
}
[HttpPost("createFarm")]
public async Task<IActionResult> CreateFarm([FromBody] FarmForCreateDto farmForCreateDto)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
Address createdFarmAddress = null;
if (farmForCreateDto.Address != null)
{
var farmAddressToCreate = _mapper.Map<Address>(farmForCreateDto.Address);
createdFarmAddress = await _repo.CreateAddress(farmAddressToCreate);
}
Address createdFarmContactAddress = null;
if (farmForCreateDto.Contact.Address != null)
{
var farmContactAddressToCreate = _mapper.Map<Address>(farmForCreateDto.Contact.Address);
createdFarmContactAddress = await _repo.CreateAddress(farmContactAddressToCreate);
}
Contact createdFarmContact = null;
if (farmForCreateDto.Contact != null)
{
var farmContactToCreate = _mapper.Map<Contact>(farmForCreateDto.Contact);
farmContactToCreate.Address = createdFarmContactAddress;
createdFarmContact = await _repo.CreateContact(farmContactToCreate);
}
var farmToCreate = _mapper.Map<Farm>(farmForCreateDto);
farmToCreate.Address = createdFarmAddress;
farmToCreate.Contact = createdFarmContact;
var createdFarm = await _repo.CreateFarm(farmToCreate);
var farmToReturn = _mapper.Map<FarmForDetailedDto>(createdFarm);
return CreatedAtRoute("GetFarm", new { controller = "Farms", id = createdFarm.Id }, farmToReturn);
}
public class Farm
{
public int Id { get; set; }
public string Name { get; set; }
public int? AccountId { get; set; }
public Account Account { get; set; }
public int? AddressId { get; set; }
public Address Address { get; set; }
public int? ContactId { get; set; }
public Contact Contact { get; set; }
public ICollection<Barn> Barns { get; set; }
}
public class FarmForCreateDto
{
[Required]
public string Name { get; set; }
public Models.Account Account { get; set; }
public ContactForCreateDto Contact { get; set; }
public AddressForCreateDto Address { get; set; }
}
You need to configure mappings. 您需要配置映射。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.