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

发布于 2024-11-01 22:16:20 字数 742 浏览 1 评论 0原文

我在会话中存储了一个购物车,当用户单击购买时,它会减少数据库中存储的商品数量。

如果用户在付款之前关闭浏览器,我想将这些数量返回到数据库中。

我在 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();
        }
    }

I have a shopping cart stored in session which decreases quantities of items stored in database when user clicks purchase.

If the user closes their browser before they have paid I want to return these quantities back into the database.

I am doing this in the void Session_End(object sender, EventArgs e) event in global.asax but the item quantities are not increasing. I set the session timeout to 1 minute in the web.config and the session is indeed ending because if i sit there with a full shopping cart, it is empty after a minute but the quantities in the database are not updated.

this is my code in 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();
        }
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

永言不败 2024-11-08 22:16:20

您的问题可能是由于会话状态在会话结束事件中可能不可用。如何在 ShoppingCart.Instance 访问器中引用会话状态?请求结束时不一定会触发会话结束事件,因此您可能没有有效的 HttpContext 来获取会话状态。

无论如何,Session_End 事件是实现您想要做的事情的不可靠方法。例如,对于进程外会话,不会引发该事件。如果托管您的 Web 应用程序的应用程序域崩溃,您的股票数据会发生什么情况?更好的解决方案是仅在购买商品时(而不是在将商品添加到购物车时)标记库存数量。

Your problem is perhaps due the fact that session state may not available in the session end event. How do you reference the session state in ShoppingCart.Instance accessor? Session end event is not necessarily fired while request in ending, so you may not have a valid HttpContext to get the session state.

Regardless, Session_End event is unreliable way to achieve what you want to do. For example, for out of process session, the event does not get raised. What will happen to your stock data if the app-domain hosting your web application crashes? The better solution is to mark your stock quantity only when the item is purchased (and not when item is added to the shopping cart).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文