繁体   English   中英

EF Core并不包括所有子项目

[英]EF Core does not include all the child items

我正在使用EF Core和.NET Core 2.0。

我有这个实体层次结构:

  • 订购

    • OrderItem的

      • 产品

我在服务中的LINQ查询有效,但仅返回一个OrderItem,而我有5个。它也很好地返回了该OrderItem的产品。 所以我想要的是,修改此查询以实际上包括特定订单ID的所有OrderItem,而不仅仅是第一项。 我期望include能够为我完成这项工作。

public class Order
{
    public int Id { get; set; }
    public DateTime OrderDate { get; set; }
    public decimal TotalPrice { get; set; }
    public List<OrderItem> OrderItems { get; set; }

    public decimal CalculateTotal()
    {
        return OrderItems.Sum(item => item.GetPrice());
    }
}

public class OrderItem
{
    public int Id { get; set; }
    public int OrderId { get; set; }
    public int ProductId { get; set; }
    public int Quantity { get; set; }
    public Product Product { get; set; }
    public Order Order{ get; set; }

    public decimal GetPrice()
    {
        return Product.Price * Quantity;
    }
}

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public decimal Price { get; set; }
}

这是带有查询的服务:

public class OrderRepository: IOrderRepository
{
    private readonly BasketDbContext _basketDbContext;
    public OrderRepository(BasketDbContext basketDbContext)
    {
        _basketDbContext = basketDbContext;
    }

    public IEnumerable<Order> GetAllOrders()
    {
        return _basketDbContext.Orders
            .Include(x => x.OrderItems)
            .ThenInclude(y => y.Product).ToList();
    }
}

这是我从GetAllOrders方法获得的JSON:

[  
    {  
      "id":1,
      "orderDate":"2019-02-02T11:24:36.103",
      "totalPrice":0.0000,
      "orderItems":[  
         {  
            "id":1,
            "orderId":1,
            "productId":1,
            "quantity":1,
            "product":{  
               "id":1,
               "name":"Samsung Galaxy S8 64GB",
               "description":"5.8-Inch, Dual pixel 12MP camera",
               "price":390.0000
            }

如您所见,JSON的格式也不正确,它不会关闭开头的[{。

我做错了什么? 谢谢您的帮助

看起来在序列化的最后一步,您的序列化程序无法继续执行,因此仅退出而ASP.NET Core将未完成的响应发送给客户端。 可能是由于您从OrderItemOrder反向引用而发生的。 假设您正在使用Newtonsoft的Json.NET,请尝试在Startup.cs 中将JsonSerializerSettings设置为ReferenceLoopHandling = ReferenceLoopHandling.Ignore

public void ConfigureServices(IServiceCollection services)
{
  services.AddMvc()
    .AddJsonOptions(
        o => o.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore
    );
}

另一个选择是简单地从序列化中排除OrderItemOrder ,例如通过[JsonIgnore]属性,但是,这当然意味着它永远不会出现在您的任何响应中。

暂无
暂无

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

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