我使用c#mvc和实体框架。
我为一家电子商店编写代码,而我正在尝试为购物车编写代码。
购物车具有cartItems列表,而Cartitem具有产品和数量变量。
当我想从购物车中删除cartItem时,我调用cart.remove(int productid)函数,我编写了适当的实体框架代码以将其从数据库中删除,但是我还从内存中存在的cart类中删除了cartitem。 />
为了使我的对象与我对数据库所做的更改同步,我做了两次几乎相同的事情。但这对我来说似乎不是很有效。
一次更新数据库,一次更新驻留在内存中的对象。
我几乎在购物车类中的每个函数上都这样做。
这是我的课程
公共类UserCart
{
私人EshopContext db;
[ForeignKey("user")]
public string id { get; set; }
public virtual User.User user { get; set; }
public virtual List<CartItem> cartItems { get; set; }
[ForeignKey("voucher")]
public int voucherId;
public Voucher voucher { get; set; }
public double SubTotalCost { get; set; }
public UserCart(string userId, EshopContext db)
{
this.id = userId;
this.db = db;
db.UserCarts.Add(this);
db.SaveChanges();
}
public List<CartItem> getCartItems()
public void add(int productId)
public void remove(int productId)
{
//remove from the database
CartItem item = db.CartItems.Where(p => p.serialnum == productId && p.cartId == this.id).FirstOrDefault();
if (item != null)
{
if(item.quantity > 1)
{
item.quantity -= 1;
db.SaveChanges();
}
else
{
db.CartItems.Remove(item);
db.SaveChanges();
}
}
//remove from the class
CartItem item2 = cartItems.Where(p => p.serialnum == productId).FirstOrDefault();
if (item2 != null)
{
if (item2.quantity > 1)
{
item2.quantity -= 1;
}
else
{
cartItems.Remove(item2);
}
}
}
public double calculateCost()
public void addVoucher(int voucherId)
public void removeVoucher()
public Voucher getVoucher()
public void clearCart()
}
答案 0 :(得分:0)
虽然@GertArnold的评论是正确的,但在我看来,您似乎正在解决此错误。以我的经验,您将更新内存中对象,然后将其保存到数据库中。重复两次是一个坏主意。