Ядро Dotnet - PullRequest
       44

Ядро Dotnet

0 голосов
/ 08 марта 2019

Сейчас я создаю сайт, где вы можете размещать заказы.

Там у нас есть Order, OrderItem и 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; }
}

При создании заказа я получу:

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

и добавил в контроллер:

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

и в 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);
            });

, но всегда отображение для OrderItem => item является нулевым, и поэтому его ошибка выдачи внутри autopper.

Я знаю, это длинный вопрос, но он убивает меня, я был бы признателен, если бы вы могли помочь.Заранее спасибо

1 Ответ

0 голосов
/ 08 марта 2019

Вы используете более старую версию Automapper.В версии 8.0 ResolveUsing было объединено с MapFrom.Похоже, у вас есть источник и пункт назначения поменялись.Попробуйте код ниже или добавьте .Reversemap()

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