接收 AutoMapperMappingException

Receiving AutoMapperMappingException

目前我正在创建一项新功能。看起来很简单,但我遇到了将 dto 自动映射到另一个的问题。

我必须创建一个愿望清单[添加/删除愿望清单的项目]。

一切正常,除了一件事:将项目添加到心愿单时,我收到如下消息:

"type": "AutoMapperMappingException",
"message": "Error mapping types..."

但是,我可以看到它已插入到数据库中。另外,也可以删除它。我知道问题与 Automapper 有关,但我不知道如何正确映射。

[HttpPost]
public async Task<IActionResult> Add(WishListItemCreationDto wishListItemDto)
{
    var itemAdd = _mapper.Map<WishlistItemDto>(wishListItemDto);
    var itemCreated = await _wishListItemService.AddAsync(itemAdd);

    return CreatedAtAction(nameof(GetId), new { id = itemCreated.Id }, wishListItemDto);
}
  
//service
public async Task<WishlistItemDto> AddAsync(WishlistItemDto item)
{
    var entity = _mapper.Map<WishlistItem>(item);
    var entityDetails = await _productDetailsRepository.GetById(item.ProductDetailId);
    entity.ProductDetails = entityDetails;
    await _wishListItemRepository.AddAsync(entity);

    return _mapper.Map<WishlistItemDto>(entity);
}

DTO:

public class WishListItemCreationDto
{
        [Required]
        public string CustomerId { get; set; }

        [Required]
        public int ProductDetailId { get; set; }

        [Min(1)]
        [Required]
        public int Quantity { get; set; }
}

public class WishlistItemDto
{
        public int Id { get; set; }
        public string CustomerId { get; set; }
        public int ProductDetailId { get; set; }

        public ProductDetailsDtoWithPrimaryImage ProductDetails { get; set; }

        public int Quantity { get; set; }
}

public class WishlistItem
{
        public int Id { get; set; }
        public string CustomerId { get; set; }
        public Customer Customer { get; set; }
        public int ProductDetailsId { get; set; }
        public ProductDetails ProductDetails { get; set; }
        public int Quantity { get; set; }
}

产品详细信息 DTO:

public class ProductDetails
{
    public int Id { get; set; }
    public int ProductId { get; set; }
    public Product Product { get; set; }

    public IList<ProductAttributeValue> ProductAttributes { get; set; } = new List<ProductAttributeValue>();

    public int Quantity { get; set; }
    public string Sku => $"BRD{Id}";
    public byte[] RowVersion { get; set; } = new byte[0];
}

public class ProductDetailsDtoWithPrimaryImage
{
    public int Id { get; set; }
    public int Quantity { get; set; }
    public int ProductId { get; set; }

    public ProductDisplayEntity Product { get; set; }

    public IEnumerable<ProductAttributeWithValueDto> ProductAttributes { get; set; }

    public byte[] RowVersion { get; set; }
    public string Sku => $"BRD{Id}";
    public int? PrimaryImageId { get; set; }
}

自动映射器:

public WishlistItemProfile()
{
    CreateMap<WishlistItem, WishListItemCreationDto>().ReverseMap();
    CreateMap<WishlistItemDto, WishListItemCreationDto>().ReverseMap();
    CreateMap<WishlistItem, WishlistItemDto>()
                .ForMember(wi => wi.ProductDetailId, opt => opt.MapFrom(f => f.ProductDetailsId))
                .ForMember(wi => wi.ProductDetails, opt => opt.MapFrom(f => f.ProductDetails))
                .ReverseMap();
}

一切正常,但您错过了 类 的内部映射。

错误说明:

Mapping types:
ProductDetailsDtoWithPrimaryImage -> ProductDetails
SimpleWebApi.Controllers.ProductDetailsDtoWithPrimaryImage -> SimpleWebApi.Controllers.ProductDetails

在构造函数中添加额外的映射WishlistItemProfile

CreateMap<ProductDetails, ProductDetailsDtoWithPrimaryImage>().ReverseMap();

它开始完美运行