C#按订单更改库存数量

时间:2016-04-12 11:46:51

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

下订单后,我如何使用ShoppingCart中的数量来调整数据库中产品的数量,降低可购买的库存量?

这是我的课程, 带创建订单的ShoppingCart类

 public int CreateOrder(Order order)
    {
        decimal orderTotal = 0;

        var cartItems = GetCartItems();

        // Iterate over the items in the cart, adding the order details for each
        foreach (var item in cartItems)
        {
            var orderDetail = new OrderDetail
            {
                ProductId = item.ProductId,
                OrderId = order.OrderId,
                UnitPrice = item.Product.Price,
                Quantity = item.Count
            };
            // Set the order total of the shopping cart
            orderTotal += (item.Count * item.Product.Price);

            storeDB.OrderDetails.Add(orderDetail);

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

        // Save the order
        storeDB.SaveChanges();
        // Empty the shopping cart
        EmptyCart();
        // Return the OrderId as the confirmation number
        return order.OrderId;
    }

我的订单类

[Bind(Exclude = "OrderId")]
public partial class Order
{
    [ScaffoldColumn(false)]
    public int OrderId { get; set; }

    [ScaffoldColumn(false)]
    public System.DateTime OrderDate { get; set; }

    [ScaffoldColumn(false)]
    [Remote("CheckUserName", "Account")]
    public string Username { get; set; }

    [Required]
    [StringLength(16, ErrorMessage = "Your name is too long")]
    [Display(Name = "First Name")]
    public string FirstName { get; set; }

    [Required(ErrorMessage = "Your last name is required.")]
    [StringLength(16, ErrorMessage = "Last name is too long.")]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }

    [Required(ErrorMessage = "Address is required.")]
    public string Address { get; set; }

    [Required(ErrorMessage = "City is required.")]
    public string City { get; set; }

    [Required(ErrorMessage = "Postcode is required.")]
    [Display(Name = "Post Code")]
    public string PostalCode { get; set; }

    [Required(ErrorMessage = "Country is required.")]
    public string Country { get; set; }

    [Required(ErrorMessage = "Phone number is required.")]
    public string Phone { get; set; }

    [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}", ErrorMessage = "Email doesn't look like a valid email address.")]
    public string Email { get; set; }

    [System.ComponentModel.DataAnnotations.Compare("Email")]
    [Display(Name = "Confirm your email address")]
    public string EmailConfirm { get; set; }


    [ScaffoldColumn(false)]
    public string PaymentTransactionId { get; set; }


    [ScaffoldColumn(false)]
    public bool HasBeenShipped { get; set; }

    [ScaffoldColumn(false)]
    [ReadOnly(true)]
    public decimal Total { get; set; }

    public CardDetails cardDetails { get; set; }
    //public List<CardDetails> cardDetails { get; set; }
    public List<OrderDetail> OrderDetails { get; set; }
}

我的CheckOutController

[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;

                    //Order gets saved
                    storeDB.Orders.Add(order);
                    storeDB.SaveChanges();
                    //Order gets processed
                    var cart = ShoppingCart.GetCart(this.HttpContext);
                    cart.CreateOrder(order);

                    //NEW TEST IF SAVES
                    storeDB.SaveChanges();

                    //Model.Product.stock = item.Product.stock - item.count;



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

OrderDetails Class

public class OrderDetail
{
    public int OrderDetailId { get; set; }
    public int OrderId { get; set; }
    public int ProductId { get; set; }
    public int Quantity { get; set; }
    public decimal UnitPrice { get; set; }
    public virtual Product Product { get; set; }
    public virtual Order Order { get; set; }
}

1 个答案:

答案 0 :(得分:0)

您可以在ShoppingCart类的ForEach循环中添加以下代码

    // Get the product
    var product = storeDB.Products
        .Single(products => products.productID == item.ProductId);

    //Deduce available stock based on item in carts
    product.productQty = product.productQty - item.Count; 

    storeDB.saveChanges();

首先获取产品详细信息,然后根据购物车中有多少商品推断产品库存。最后执行saveChanges()以保存在数据库中。希望这有助于:)