用户会话期满时,购物车会更新数据库中的数量

|| 我有一个存储在会话中的购物车,当用户单击购买时,这会减少数据库中存储的项目数量。 如果用户在付款之前关闭浏览器,我想将这些数量返回到数据库中。 我正在global.asax中的void Session_End(object sender,EventArgs e)事件中执行此操作,但项目数量没有增加。我在web.config中将会话超时设置为1分钟,并且会话确实结束了,因为如果我坐在那里拿着完整的购物车,一分钟后它是空的,但是数据库中的数量没有更新。 这是我在session_end中的代码
    void Session_End(object sender, EventArgs e)
    {

        if (ShoppingCart.Instance.Items.Count == 0)
            return;
        foreach (var cartItem in ShoppingCart.Instance.Items.OfType<CartItemGeneric>())
        {
            var stock = thisModel.EshopItems.Where(i => i.Id == cartItem.Item.Id).First();
            stock.SapQuantity += cartItem.Quantity;
            thisModel.SaveChanges();
        }
    }
已邀请:
您的问题可能是由于会话结束事件中可能不存在会话状态这一事实造成的。您如何在ѭ1or访问器中引用会话状态?会话结束事件不一定会在请求结束时触发,因此您可能没有有效的HttpContext来获取会话状态。 无论如何,Session_End事件是实现您想要执行的操作的不可靠方法。例如,对于进程外会话,不会引发该事件。如果托管您的Web应用程序的应用程序域崩溃,您的库存数据将如何处理?更好的解决方案是仅在购买商品时标记您的库存数量(而不是在将商品添加到购物车时标记)。

要回复问题请先登录注册