我正在尝试为现有模型的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 .. 我无法解释为什么以及何时发生。
答案 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实体始终具有一个购物车,该购物车可能为空。