Записи дублируются в базе данных во время оформления заказа - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь выучить / сделать mvc 5 e commerce веб-приложение.Все отлично работает, кроме как при покупке предмета.Товар дублируется в базе данных вместо вычитания количества купленного товара.Как я должен изменить свой код, чтобы сделать это?

Я пробовал несколько способов соединения идентификатора товара с идентификатором товара заказа, но вместо этого я получаю ошибки.Любая помощь будет оценена.Спасибо.

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");
        }

1 Ответ

0 голосов
/ 23 сентября 2019

Вы добавляете товары из своей корзины, вызывая

orderItems.Add (orderItem)

Ваш контекст будет воспринимать это как новый элемент.Здесь у вас есть два варианта:

  • сообщить контексту, что это существующий объект, вызвав _context.Items.Attach(orderItem)
  • перезагрузить элемент из контекста, например, позвонив orderItems.Add(_context.Items.Single(x => x.id == orderItem.Id)

Проверьте Работа с состояниями объекта для получения подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...