我正在尝试将我的 asp.net mvc4 应用程序(它大量使用 SessionState)转换为无状态应用程序。我知道我可以将此信息存储在数据库中,并且打算这样做。
不过,我的问题是关于我的特定架构。我的应用程序有一个主“页面”,由许多局部视图面板组成,每个面板都有可以影响其他面板的操作。到目前为止,我一直在做的是将 viewModel 的整个状态(许多相互关联的 EF 列表集合和“记录”对象)存储在会话中,并且运行良好。除非会话随机终止。
因此,我需要将这些数据从会话中取出,并放入数据库中,以便我可以在需要时重建数据。我担心的是,如果我将信息存储在数据库中,在屏幕上执行的每个操作都可能影响 3-5 个不同的面板,每个面板都有自己的状态更新,每次交互至少需要 10 次往返数据库!
我可以使用哪些策略来使这个想法更具可扩展性?
额外信息
这里所讨论的视图是一种 POS 购物车系统。有用于选择事件、选择/添加项目到购物车、编辑购物车项目、选择联系人、编辑联系人、显示购物车项目、显示购物车“小计”的面板,最后还有一个带有 [结帐] 按钮的面板。
选择新事件将更改可用项目列表。选择要添加到购物车的项目将更改购物车项目列表、小计以及结帐面板。编辑购物车项目也是如此。
主要关心的是如何从丢失的会话中恢复,因为我发现内置的 asp.net 会话代码太不可靠了。我的测试人员遇到了会话超时的问题,然后我的应用程序没有任何类型的恢复过程。当它安装在 1500 个站点上时,每个站点平均有 10 个用户,它将成为会话丢失问题的瘟疫,我需要在它成为一个真正的问题之前解决这个问题。
我同意我不会成为无国籍人……匆忙中用词的错误选择。我只是试图将该状态转换为一种我可以依赖的形式来克服会话失败。我目前的主要想法是继续使用会话作为 viewModel 数据的本地缓存,但是如果会话丢失以某种方式丢失,则有一个后备操作可以从 DB 重建 viewModel。