首页 > 解决方案 > 结帐期间在数据库中重复的记录

问题描述

我正在尝试学习/制作 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");
        }

标签: c#asp.net-mvc-5

解决方案


您正在通过调用从购物车中添加商品

orderItems.Add(orderItem)

您的上下文会将其视为新项目。您在这里有两个选择:

  • 通过调用告诉上下文这是一个现有的实体_context.Items.Attach(orderItem)
  • 从上下文重新加载项目,例如通过调用orderItems.Add(_context.Items.Single(x => x.id == orderItem.Id)

检查使用实体状态了解详细信息。


推荐阅读