Net Core API не возвращает сначала все дочерние базы данных

#c# #asp.net-core

#c# #asp.net-core

Вопрос:

Ниже приведен мой код. Мне интересно, может быть, мне лучше использовать что-то другое. Я чувствую, что это должно быть довольно простым возвратом.

Репозиторий:

 public Task<OrderHistory> GetInvoicedMacolaOrder(string orderNumber)
            {
                orderNumber = " "   orderNumber;
                DataContext.ChangeTracker.LazyLoadingEnabled = false;
    
                    var order = DataContext.OrderHistory
                                    .Include(order => order.OrderLines)
                                    .ThenInclude(line =>  line.vw_uniqueCartonIds)
                                    .FirstOrDefaultAsync(o => o.ord_no == orderNumber);
                    
                return order;
            }
  

OrderHistoryController:

 [Authorize(Policy = "CreateReplacementOrder")]
        [HttpGet("invoicedorder/{orderNumber}/get")]
        public async Task<IActionResult> OrderLookUp(string orderNumber)
        {
            if (PoExists(orderNumber))
            {
                
                var order = await _mrepo.GetInvoicedOrder(orderNumber);
               
                var orderToReturn = _mapper.Map<OrderHistoryDtoDetail>(order);

                return Ok(orderToReturn);
            }
            else
            {
                return BadRequest("Could not find order number.");
            }
        }
  

Это то, что возвращает:

  {
        "ord_no": "51464326",
        "status": "P",
        "ord_dt": "2020-03-29T00:00:00",
        "apply_to_no": null,
        "oe_po_no": "3804339            ",
        "cus_no": "65564654018",
        "ship_to_name": "Omar Brown"
        "OrderLines": [
            {
                "ord_type": "O",
                "ord_no": "51464326",
                "line_seq_no": 1,
                "item_no": "jkhhuk",
                "line_no": 1,
                "vw_uniqueCartonIds": [
                    {
                        "box_id": 20,
                        "prod_cat": "044",
                        "box_number": 1,
                        "uniqueBoxID": "100001"
                    },
                    {
                        "box_id": 20,
                        "prod_cat": "044",
                        "box_number": 2,
                        "uniqueBoxID": "100002"
                    },
                   {
                        "box_id": 20,
                        "prod_cat": "044",
                        "box_number": 3,
                        "uniqueBoxID": "100003"
                    }
                ]
            }
        ]
    }
  

Чего я ожидаю:

 {
            "ord_no": "51464326",
            "status": "P",
            "ord_dt": "2020-03-29T00:00:00",
            "apply_to_no": null,
            "oe_po_no": "3804339            ",
            "cus_no": "65564654018",
            "ship_to_name": "Omar Brown"
            "OrderLines": [
                {
                    "ord_type": "O",
                    "ord_no": "51464326",
                    "line_seq_no": 1,
                    "item_no": "jkhhuk",
                    "line_no": 1,
                    "vw_uniqueCartonIds": [
                        {
                            "box_id": 20,
                            "prod_cat": "044",
                            "box_number": 1,
                            "uniqueBoxID": "100001"
                        },
                        {
                            "box_id": 21,
                            "prod_cat": "044",
                            "box_number": 2,
                            "uniqueBoxID": "100002"
                        },
                       {
                            "box_id": 22,
                            "prod_cat": "044",
                            "box_number": 3,
                            "uniqueBoxID": "100003"
                        }
                    ]
                },
                {
                    "ord_type": "O",
                    "ord_no": "51464326",
                    "line_seq_no": 2,
                    "item_no": "58hhuk",
                    "line_no": 2,
                    "vw_uniqueCartonIds": [
                        {
                            "box_id": 25,
                            "prod_cat": "054",
                            "box_number": 1,
                            "uniqueBoxID": "200001"
                        },
                        {
                            "box_id": 26,
                            "prod_cat": "054",
                            "box_number": 2,
                            "uniqueBoxID": "200002"
                        }
                    ]
                }
            ]
        }
  

Также я видел сообщения о ReferenceLoopHandling и добавил это в свой файл startup.cs, но безрезультатно.

 services.AddControllers(options =>
                {
                    var policy = new AuthorizationPolicyBuilder()
                        .RequireAuthenticatedUser()
                        .Build();

                    options.Filters.Add(new AuthorizeFilter(policy));

                })
               .AddNewtonsoftJson(opt =>
                {
                    opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
                });
  

В чем причина проблемы?

Комментарии:

1. Это может помочь, если вы отладите его, чтобы сузить проблему, поскольку кажется, что это может быть проблема в репозитории, в _mapper.Map или при сериализации

2. Кроме того, это может быть опечатка, но вы вызываете GetInvoicedOrder со своего контроллера, но показали реализацию GetInvoicedMacolaOrder

3. Если вам нужны ВСЕ, тогда зачем вы используете. FirstOrDefaultAsync(o => o.ord_no == Порядковый номер);

4. @jdweng Я новичок в .net в целом, что еще я могу использовать?

5. Попробуйте ForEachAsync вместо FirstOrDefaultAsync