我应该两次做同一件事吗?

时间:2018-11-11 18:12:40

标签: c# oop entity-framework-6

我使用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()

}

1 个答案:

答案 0 :(得分:0)

虽然@GertArnold的评论是正确的,但在我看来,您似乎正在解决此错误。以我的经验,您将更新内存中对象,然后将其保存到数据库中。重复两次是一个坏主意。