gpt4 book ai didi

c# - 跨多个 HTTP 请求拆分的多步数据库事务

转载 作者:太空狗 更新时间:2023-10-29 21:19:22 25 4
gpt4 key购买 nike

我过去曾在桌面客户端应用程序中使用 TransactionScope 来回滚未完成的多步骤事务。这种方法似乎不太可能在 Web 应用程序中起作用。

如果整个过程未完成,谁能建议如何确保跨多个页面的多个步骤回滚? (例如,他们的浏览器崩溃或他们在进程中关闭浏览器)

当然,我可以写入某种临时表,然后在单个事务中将最终记录传输到真实表,但这有竞争条件的风险。我想开始一个事务,提供几个页面,每个页面将一个事务写入表,然后通过提交完成事务,如果事务未完成,则回滚 session 结束。

还是我的思路不对?建议?

因为我使用的是 MVC 3、EF 4.1 和 Ninject,所以我不确定这将如何影响解决方案,但我想我会包含这些信息。

最佳答案

多个页面之间没有数据库事务/TransactionScope。即使尝试做那样的事情也是非常错误的。

你有两种选择来解决这个问题:

  • 使用 session

    仅当用户完成所有步骤并确认保存时,才将数据存储在 session 中并将其持久保存到数据库中。这绝对是您所需要的。]

  • 使用工作流基础和长时间运行的事务。

    长时间运行的事务不是数据库事务——它们是一个完全自定义的解决方案,您必须手动实现补偿(长时间运行的事务的回滚)。您仍然需要以某种方式检测您的工作流程是否应该得到补偿,但这对于您的解决方案来说不是必需的。它适用于您需要多个 session 的“交易”的解决方案。

关于c# - 跨多个 HTTP 请求拆分的多步数据库事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7035259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com