首页 > 解决方案 > 如果服务器崩溃,我如何确保数据不会丢失

问题描述

比如说一个验证 JWT 的示例 API 控制器,然后获取一个 json 数据来创建用户之间的事务在这种方法中,在整个方法执行过程中会发生多个 SELECT、UPDATE、INSERT 和 DELETE,例如获取用户的资金、拉取将资金存入临时“钱包”,然后将资金添加到接收方

说方法会像这样进行数据库交互: 1.SELECT -> 2.UPDATE -> 4.CREATE -> 5.SELECT -> 6.UPDATE -> SELECT

但如果服务器/应用程序在查询 n.4 处崩溃,则 n.6 交互将永远不会完成。

我的问题是:如何确保该方法完成或将 db 恢复到崩溃前的初始状态?

我的想法是为我需要的数据创建一个“快照”,以防发生崩溃,然后将主表恢复到它的快照状态。如果可能的话,处理切换回该快照状态以及如何检测服务器崩溃的解决方案

标签: c#databaseapiserver

解决方案


这是我用来介绍事务提交的代码。

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() 行时才会提交所有更改。否则,如果发生任何错误,所有更改都将回滚。

请参阅有关事务的 MS 文档


推荐阅读