c# - 结帐期间在数据库中重复的记录
问题描述
我正在尝试学习/制作 mvc 5 电子商务 Web 应用程序。除了购买物品外,一切都很好。该项目在数据库中重复,而不是减去所购买产品的数量。我应该如何更改我的代码来做到这一点?
我尝试了多种将产品 ID 与订单商品产品 ID 连接起来的方法,但我得到了错误。任何帮助,将不胜感激。谢谢你。
public ActionResult Checkout(string firstName, string lastName, string address, string email, string phone)
{
Order order = new Order();
order.firstName = firstName;
order.lastName = lastName;
order.user = User.Identity.Name;
order.phone = phone;
order.email = email;
order.address = address;
List<OrderItem> orderItems = new List<OrderItem>();
foreach (CartItem item in (List<CartItem>)Session["cart"]){
OrderItem orderItem = new OrderItem();
orderItem.Order = order;
orderItem.Product = item.Product;
orderItem.quantity = item.Quantity;
orderItems.Add(orderItem);
}
order.orderItems = orderItems;
_context.Orders.Add(order);
_context.SaveChanges();
Session["cart"] = null ;
return RedirectToAction("PaymentSuccess", "Checkout");
}
解决方案
您正在通过调用从购物车中添加商品
orderItems.Add(orderItem)
您的上下文会将其视为新项目。您在这里有两个选择:
- 通过调用告诉上下文这是一个现有的实体
_context.Items.Attach(orderItem)
- 从上下文重新加载项目,例如通过调用
orderItems.Add(_context.Items.Single(x => x.id == orderItem.Id)
检查使用实体状态了解详细信息。
推荐阅读
- java - 使用 Jolt 变形时反击
- firebase - 为什么 firebase_core 和 firebase_messaging 之间的颤振版本解决失败?
- r - 将字符串向量转换为符号
- javascript - 当 vuetify 的 v-card 有关联的链接时,从 v-card 中移除点击效果
- javascript - json文件中的国家如何显示
- powershell - 使用 PowerShell 获取 IIS 8.5 日志文件信息
- r - dplyr mutate ifelse 返回组的第一个值而不是逐行
- r - 如何在R中按数字对列进行排序?
- python - 覆盖模拟对象的“is”运算符
- amazon-web-services - ECS服务和EC2实例的CPU利用率差异