Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#根据订单更改库存数量_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

C#根据订单更改库存数量

C#根据订单更改库存数量,c#,asp.net,asp.net-mvc,asp.net-mvc-5,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

下单后,我将如何使用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; }
}
OrderDetails类

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

您可以在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()保存到数据库中。希望这有帮助:)

我想写一个过程来处理跨国部分。对不起,我不明白你说的是什么。我想他指的是使用存储过程。然而,你的问题在这里是完全不清楚的。您已经注释掉了一行代码,这些代码似乎至少正在尝试这样做。你有什么问题?什么不起作用?此外,我们也无法真正帮助您修改我们无法看到的内容。如果有实体参与跟踪股票。发布该实体类。否则,我们将需要看到某种表结构。这行代码是我自己研究后的尝试,我似乎无法让它正常工作是的,我认为@SamGhatak试图说,您希望将添加订单和减少产品库存作为交易的一部分,实现这一点的一种方法是通过存储过程。您仍然可以使用EF来完成此操作,但在调用SaveChanges()之前,您需要更新EF产品实体(而不是模型)上的库存。@CodeCaster请告诉我我不理解您的语句。使用给定的输入测试代码。另见我在问题下的评论。您不检查输入,允许用户订购负值或大于当前库存的金额。@CodeCaster我现在理解您的观点,我同意您在问题下的评论。这在生产层面上是行不通的,让我们把它当作家庭作业。至于检查输入,也许为属性字段“Quantity”添加数据注释可以检查负值,而条件语句可以检查大于当前库存的金额。如果我错了,请纠正我。谢谢
    // 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();