Всего не обновляется база данных в учебнике MvcMusicStore? MVC2 - PullRequest
0 голосов
/ 02 мая 2011

Я использую MVC2 и следую инструкциям на MvcMusicStore.Проблема в том, что итог не обновляется в таблице «Заказы» в базе данных.Каждый раз, когда я заказываю что-то с сайта и затем захожу в базу данных, поле Total по-прежнему показывает 0,00.Кто-нибудь понял это.Ниже приведен код:

public int CreateOrder(Order order)
{
    decimal totalOrder = GetTotal();

    var cartItems = GetCartItems();

    //Iterate the items in the cart, adding Order Details for each
    foreach (var cartItem in cartItems)
    {
        var orderDetails = new OrderDetail
        {
            ProductId = cartItem.ProductId,
            OrderId = order.OrderId,
            UnitPrice = cartItem.Product.Price,
            Quantity = cartItem.Count
        };

        cricket_Model.OrderDetails.AddObject(orderDetails);
        totalOrder = (cartItem.Count * cartItem.Product.Price);
    }

    // Set the order's total to the orderTotal count
    order.Total = totalOrder;

    //Save the order
    cricket_Model.SaveChanges();

    //Empty the shopping cart
    EmptyCart();

    //Return the OrderId as a confirmation number
    return order.OrderId;
}

Я просто хочу сказать, что все обновляется в таблице OrderDetails и все обновляется в таблице Order, кроме поля Total.

Ответы [ 3 ]

2 голосов
/ 02 августа 2011

Я не эксперт в PERSISTENCE. Но этот щекотал мои волосяные фолликулы в течение хороших двух часов. Обходной путь для этого, как было опубликовано @Ben Pretorius

//Save Order
storeDB.Orders.Add(order);
storeDB.SaveChanges();

//Process the order
var cart = ShoppingCart.GetCart(this.HttpContext);
cart.CreateOrder(order);

//! ADD THIS METHOD TO PERSIST DATA AGAIN! And your Total will Update.
storeDB.SaveChanges();

Несмотря на то, что мы сохраняем БД в методе CreateOrder в ShoppingCart, он все еще имеет свойство Order как нулевой элемент.

В то время как при возврате контекста страницы в AddressAndPayement ActionResult, свойство Order для Cart завершается. Поэтому при сохранении в БД в контроллере 1013 * сохраняется сумма заказа.

Я все еще пытаюсь обновить его из Метода внутри. У кого-нибудь есть идеи получше?

1 голос
/ 27 июля 2011

Это пощекотало и мой мозг! Я использую MVC3 и нахожу себя пишущим собственную систему электронной коммерции, основанную примерно на этом руководстве, поскольку я новичок в MVC3. Я столкнулся с той же проблемой, когда он обновляет мою таблицу заказов, а также таблицу сведений о заказе, но не общий столбец таблицы заказов.

Решение, которое я придумал, выглядит следующим образом:

Внутри CheckoutController.cs внесите следующие изменения и добавьте storeDB.SaveChanges (); после CreateCard (заказ); Метод в соответствии с примером ниже:

    // POST: /Checkout/AddressAndPayment

    [HttpPost]
    public ActionResult AddressAndPayment(FormCollection values)
    {
        var order = new Order();
        TryUpdateModel(order);

        try
        {
            if (string.Equals(values["PromoCode"], PromoCode,
                StringComparison.OrdinalIgnoreCase) == false)
            {
                return View(order);
            }
            else
            {
                order.Username = User.Identity.Name;
                order.OrderDate = DateTime.Now;

                //Save Order
                storeDB.Orders.Add(order);
                storeDB.SaveChanges();

                //Process the order
                var cart = ShoppingCart.GetCart(this.HttpContext);
                cart.CreateOrder(order);

                //! ADD THIS METHOD TO PERSIST DATA AGAIN! And your Total will Update.
                storeDB.SaveChanges();

                return RedirectToAction("Complete",
                    new { id = order.OrderId });
            }

        }
        catch
        {
            //Invalid - redisplay with errors
            return View(order);
        }
    }

Это кажется немного изворотливым / странным .... Если я добавлю точку останова к SaveChanges внутри ShoppingCartModel, то он также сохранит данные, но если вы проверите БД, то после этого все равно будет отображать итоговое значение как нулевое ... Выше Код, однако, решает проблему ...

0 голосов
/ 03 мая 2011

totalOrder должно быть (обратите внимание на + = ) в цикле,

totalOrder += (cartItem.Count * cartItem.Product.Price);

Также не похоже, что вы сохраняете изменения, частью которых TotalOrder является, в базу данных. Поскольку вы не показываете нам, где определяется totalOrder, трудно сказать.

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