c# - 如果服务器崩溃,我如何确保数据不会丢失
问题描述
比如说一个验证 JWT 的示例 API 控制器,然后获取一个 json 数据来创建用户之间的事务在这种方法中,在整个方法执行过程中会发生多个 SELECT、UPDATE、INSERT 和 DELETE,例如获取用户的资金、拉取将资金存入临时“钱包”,然后将资金添加到接收方
说方法会像这样进行数据库交互: 1.SELECT -> 2.UPDATE -> 4.CREATE -> 5.SELECT -> 6.UPDATE -> SELECT
但如果服务器/应用程序在查询 n.4 处崩溃,则 n.6 交互将永远不会完成。
我的问题是:如何确保该方法完成或将 db 恢复到崩溃前的初始状态?
我的想法是为我需要的数据创建一个“快照”,以防发生崩溃,然后将主表恢复到它的快照状态。如果可能的话,处理切换回该快照状态以及如何检测服务器崩溃的解决方案
解决方案
这是我用来介绍事务提交的代码。
using (var dbContextTransaction = dbContext.Database.BeginTransaction())
{
try
{
dbContext.Database.ExecuteSqlCommand("exec xyz");
dbContextTransaction.Commit();
}
catch (Exception ex) { /* Do something here with error */ }
}
您还可以在退出 using 脚本块(使用 Transaction)之前更新数据库或对 dbContext 执行多项更改。只有在运行 dbContextTransaction.Commit() 行时才会提交所有更改。否则,如果发生任何错误,所有更改都将回滚。
推荐阅读
- php - 试图从一个数据库中获取用户名并将其与消息一起粘贴到另一个数据库
- kubernetes - 如何将字典包含到 k8s_raw 数据字段中
- jira - 将 AWS 设备场与 Jira 集成?
- ios - 同一个视图控制器出现两次
- android - 如何将加载栏添加到视图位于另一个活动中的适配器类
- bash - 通过匹配 iptables 和 netstat 的脚本检查打开的 WAN 端口?
- angular - 如何将字符串参数转换为变量 TypeScript Angular 的属性
- python - 无法在python中获取反转的字符串
- django - 调用 CreateMultipartUpload 操作时发生错误 (SignatureDoesNotMatch):
- c# - 如何从窗口服务内部在浏览器中加载网页