0

Now I am creating a website where you can place orders.

There we have Order, OrderItem and Item.

public class Order
{
    public int Id { get; set; }
    public User User { get; set; }  
    public int? UserId { get; set; }
    public ICollection<OrderItem> OrderItems { get; set; }
    public int TotalPrice { get; set; }
    public string Status { get; set; }
     public DateTime CreatedAt { get; set; }
}

public class OrderItem
{
    public int Id { get; set; }
    public int ItemId { get; set; }
    public virtual Item Item { get; set; }
    public int Count { get; set; }
    public int OrderId { get; set; }
    public Order Order { get; set; }
    public double TotalPrice { get; set; }
}

public class OrderItem
{
    public int Id { get; set; }
    public int ItemId { get; set; }
    public Item Item { get; set; }
    public int Count { get; set; }
    public int OrderId { get; set; }
    public Order Order { get; set; }
    public double TotalPrice { get; set; }
}

Upon creation of the order I will receive:

{
    "orderItems": [
        {
            "itemId": 1,
            "count": 4
        }
    ]
}

and I have added in controller:

 var userFromRepo = await _repo.GetUser (userId);
 OrderForCreationDto.UserId = userId;
 var order = _mapper.Map<Order> (OrderForCreationDto);
     // userFromRepo.Orders.Add(order);
     _repo.Add (order);

     if (await _repo.SaveAll ()) 
     {
         var OrderToReturn = _mapper.Map<OrderForCreationDto> (order);
        return Ok (OrderToReturn);
     }

and in automapper:

        CreateMap<Order, OrderForCreationDto> ();
        CreateMap<OrderItemForCreationDto, OrderItem> ()
            .ForMember (dest => dest.TotalPrice, opt => {
                opt.MapFrom (d => d.Item);
                opt.ResolveUsing (d => d.Item.Price * d.Count);
            });

but always the mapping for OrderItem => item is null and so its giving error inside automapper.

I know its a long question but its killing me, I would appreciate if you could help. Thank you in advance

Roman Svitukha
  • 1,302
  • 1
  • 12
  • 22
Hassan Kalach
  • 61
  • 1
  • 11

1 Answers1

0

You are using older version of Automapper. In the version 8.0 ResolveUsing was consolidated with MapFrom. Looks like you have source and destination switched. Try code below or adding .Reversemap()

CreateMap<OrderItem, OrderItemForCreationDto> ()
    .ForMember (dest => dest.TotalPrice, opt => 
    {
        opt.MapFrom (d => d.Item);
        opt.ResolveUsing (d => d.Item.Price * d.Count);
    });
Roman Svitukha
  • 1,302
  • 1
  • 12
  • 22
  • but for now IrderITem is Empty and i am mapping data from ORderITemForCreation to OrderItem to be able to add it to the database . all the data is available inside the OrderItemForCreation except the Item and thats where the problem is coming – Hassan Kalach Mar 08 '19 at 07:18