Eri*_*sch 6 c# asp.net-mvc transactions ninject entity-framework-4.1
我过去曾使用TransactionScope与桌面客户端应用程序回滚不完整的多步骤事务.这种方法似乎不太适用于Web应用程序.
任何人都可以建议如果整个过程没有完成,可以确保多个页面的多个步骤可以回滚的方法吗?(例如,他们的浏览器崩溃或者在中间过程中关闭浏览器)
当然,我可以写入某种临时表,然后在一次交易中将最终记录转移到真实表中,但这会带来竞争条件的风险.我想开始一个事务,提供几个页面,每个页面将一个事务写入表中,然后用提交完成事务,如果事务没有完成,那么它将在回滚时返回会议结束.
或者我没有想到正确的方法?建议?
由于我使用的是MVC 3,EF 4.1和Ninject,我不确定这会如何影响解决方案,但我认为我会包含这些信息.
TransactionScope跨多个页面没有数据库事务.即使尝试做这样的事情也是非常错误的.
您有两种方法可以解决问题:
使用 Session
将数据存储在会话中并仅在用户完成所有步骤时将其持久保存到数据库,并确认保存.这绝对是你需要的.]
使用工作流基础和长期运行的事务.
长时间运行的事务不是数据库事务 - 它们是一个完全自定义的解决方案,您必须手动实现补偿(长时间运行的事务回滚).您仍然必须以某种方式检测您的工作流程应该得到补偿,但这对您的解决方案来说不是必需的.它适用于需要多个会话的"事务"的解决方案.
| 归档时间: |
|
| 查看次数: |
1883 次 |
| 最近记录: |