Estoy tratando de aprender / hacer la aplicación web de comercio electrónico mvc 5. Todo funciona bien, excepto al comprar un artículo. El artículo se duplica en la base de datos en lugar de restar la cantidad del producto comprado. ¿Cómo debo cambiar mi código para hacer eso?

He intentado varias formas de conectar la identificación del producto con la identificación del producto del artículo del pedido, pero en su lugar obtengo errores. Cualquier ayuda sería apreciada. Gracias.

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");
        }
0
Ali 23 sep. 2019 a las 09:56

1 respuesta

La mejor respuesta

Estás agregando los artículos de tu carrito llamando

orderItems.Add (orderItem)

Su contexto lo tratará como un elemento nuevo. Tienes dos opciones aquí:

  • dígale al contexto que esta es una entidad existente llamando a _context.Items.Attach(orderItem)
  • recargar el elemento desde el contexto, p. ej. llamando a orderItems.Add(_context.Items.Single(x => x.id == orderItem.Id)

Consulte Trabajar con estados de entidad para los detalles.

1
Michael Sander 23 sep. 2019 a las 07:05