ASP.NET/MVC购物车添加项目
本文关键字:添加 项目 购物车 MVC NET ASP | 更新日期: 2023-09-27 18:08:15
我正在创建一个ASP。. NET购物车与MVC。
My Store实体包含一个DBSet of Basket。我的篮子模型,包含一个篮子项目列表。问题是,我的"AddtoBasket"函数需要搜索当前的篮项目列表,并确定是否已经存在相同的"篮项目",如果存在,则增加数量。我在购物车逻辑上陷入了死胡同。我该如何搜索我当前的"篮项"列表呢?
存储上下文
public class StoreEntities : DbContext
{
public DbSet<Order> Order { get; set; }
public DbSet<OrderItems> OrderItems {get; set;}
public DbSet<Basket> Basket { get; set; }
public dbSet<BaskItem> BasketItems {get; set; }
}
模型public class BasketItem
{
[Key]
public int BasketItemID { get; set; }
public string sellerID { get; set; }
public string sku { get; set; }
public int Quantity { get; set; }
public decimal Price { get; set; }
}
public class Basket
{
[Key]
public string BasketID { get; set; }
public virtual List<BasketItem> BasketItems { get; set; }
public System.DateTime DateCreated { get; set; }
}
购物车逻辑
public void AddtoBasket(BasketItem basketItem)
{
//Search Current Basket for basketItem
//
//If item doesnt exists, add it
if (basketItem == null){
basketItem = new BasketItem
{
sku = "",
sellerID = "",
Quantity = 1,
Price = 100
};
storeDB.BasketItems.Add(basketItem);
storeDB.SaveChanges();
}
else
{
basketItem.Quantity = +basketItem.Quantity;
storeDB.SaveChanges();
}
}
#endregion
嗯,我猜您正在接收的篮子项目没有BasketItemID(因为它是键,您可能正在获取其默认值)。这里的关键问题是你如何定义"已经存在"。为了便于讨论,我将假设sellerId(请遵循属性的PascalCase,这是通常接受的属性名称约定)和sku(不管它是什么)需要相等。在当前情况下,最明显的方法是:
var basketItem = <yourCurrentBasket>.BasketItems.
Where(bi => bi.sellerId == basketItem.sellerID && bi.sku == basketItem.sku);
现在,您将注意到我没有指定如何检索当前购物篮。这是因为这是一个架构决策,至少从您提供的信息来看,我没有看到您实现它。执行查找的最佳方法是能够按用户查找购物篮(这意味着向Basket
类添加UserId
(无论您的唯一用户标识符是什么)。是否实现用户同时拥有2个或更多活动篮子的功能取决于你的用例和需求——你应该适当地处理这个问题。根据我(和很多其他人)存储用户id/任何其他唯一标识符的最佳位置是在Session
(取决于您的身份验证模式,您可能有其他选择:有关详细信息,请参阅本主题)然后,查找变得像下面这样简单(在每个用户只有一个活动购物篮的情况下——处理多购物篮的情况并不明显复杂):
public class Basket
{
[Key]
public string BasketID { get; set; }
public virtual List<BasketItem> BasketItems { get; set; }
public System.DateTime DateCreated { get; set; }
public Guid UserId { get; set; }
}
...
var basketItem = storeDb.Basket.Where(basket => basket.UserId == currentUserId)
.Include(basket => basket.BasketItems ).Where(bi => bi.sellerId == basketItem.sellerID && bi.sku == basketItem.sku);