繁体   English   中英

AutoMapper Asp.Net Core 2:未映射的属性

[英]AutoMapper Asp.Net Core 2: Unmapped Properties

尝试将Dto映射到模型时,出现错误,提示某些属性未映射。

未映射的属性:
ID
AddressId
使用ContactID
谷仓
网关
UserFarms


但是应该假定ID是自动生成的,所以AddressId,ContactId和Barns是可为空的属性。

当我进入var farmToCreate = _mapper.Map<Farm>(farmForCreateDto);时,就会发生此问题var farmToCreate = _mapper.Map<Farm>(farmForCreateDto); 在控制器内。 它尝试记录在数据库上运行 SaveChangesAsync的用户活动,并且此时抛出错误,由于未映射的属性,它无法将Farm Dto映射到其Model。


FarmsController.cs

[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);
    }


型号\\ Farm.cs

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; }
}


DTOS \\ FarmForCreateDto.cs

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; }
}

您需要配置映射。

如何配置映射

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM