.net核心:模型中的ICollection始终为空

时间:2018-08-18 09:10:41

标签: c# asp.net entity-framework linq .net-core

我正在尝试为现有模型的ICollection添加值,但是当我下次尝试捕获它时,我的ICollection为空。

有我的代码和

型号:

    public class OrderDetails
{
    [Key]
    public int OrderID { get; set; }
    public int UserID { get; set; }
    public DateTime OrderTime { get; set; }
    public double Total { get; set; }   
    public virtual ICollection<Product> Cart { get; set; }
}

}

将值输入我的ICollection:

 OrderDetails order = new OrderDetails();

        order.UserID = u.ID;
        // I have tried this also:
        //
        // foreach(Product p in productsCollection)
        //{
        //    order.Cart.Add(p);
        //}
        // the productsCollection is a List that contains values...
        //
        order.Cart = productsCollection; // this is my problem
        order.OrderTime =DateTime.Now;
        order.Total = sum;
        _context.OrderDetails.Add(order);
        _context.SaveChanges();
        return Redirect("/Index");

尝试使用OrderID再次捕获它:

            OrderDetails orderDetails = _context.OrderDetails
                                  .Where(ood => ood.OrderID == 18)
                                  .Include("Cart")
                                  .FirstOrDefault();

有2个屏幕快照可以演示我的问题:

1)购物车是空的: when trying to catch the cart:

2)dbcontext同时:
but when checking my dbcontext it contains the values:

**请注意,有时购物车的数量可以是1、2或0 .. 我无法解释为什么以及何时发生。

3 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,则希望获得刚刚更新的值。 您可以通过在实例对象更新后立即调用它来实现此目的,如下所示:

OrderDetails order = new OrderDetails();

        order.UserID = u.ID;
        order.Cart = productsCollection;
        order.OrderTime =DateTime.Now;
        order.Total = sum;
        _context.OrderDetails.Add(order);
        _context.SaveChanges();
        var Id = order.OrderID //or whatever info you want from the updated query.
        return Redirect("/Index");

希望对您有帮助。

答案 1 :(得分:0)

可能是,您只是在混淆数字。从屏幕截图中可以看出,OrderID为18的订单有一个空购物车; OrderID为32的订单的购物车中有商品。

后一个订单在订单列表中的索引为18。这与OrderID无关。

答案 2 :(得分:0)

按照书面规定,您有两种将产品添加到OrderDetails中的方法,这很容易混淆:添加到购物车,以及用其他购物车替换购物车。最好只有一个。因此,请创建您的实体:

public class OrderDetails
{
    [Key]
    public int OrderID { get; set; }
    public int UserID { get; set; }
    public DateTime OrderTime { get; set; }
    public double Total { get; set; }   
    public virtual ICollection<Product> Cart { get; } = new HashSet<Product>();
}

现在,OrderDetails实体始终具有一个购物车,该购物车可能为空。