C#根据订单更改库存数量
下单后,我将如何使用ShoppingCart中的数量来调整数据库中产品的数量,从而降低可供购买的库存 这是我的课, 带有创建订单的ShoppingCart类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
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();