单个事务中的数据库操作和调用API



我们有两个系统,一个身份管理系统处理身份验证,另一个是用户访问的应用程序(比如UserApp)(网站)。当用户注册时,在身份管理系统和UserApp数据库中创建用户帐户。数据应该在这两个系统之间保持同步。因此,当用户注册

时,当前代码执行以下操作
  1. 数据被插入数据库(使用实体框架)
  2. 使用API调用在IAM中创建帐户

场景:

  1. 如果数据库插入失败,则不调用API
  2. 如果数据库插入成功,API失败,则删除记录。问题是如果删除失败,数据不同步,需要做什么。

最好的处理方法是什么?该应用程序是用c#和SQL Server开发的。

您可以使用数据库事务。您可以创建一个数据库连接并打开它。第一行应该是BEGIN TRANSACTION。这意味着在运行COMMIT TRANSACTION语句之前,您执行的任何后续SQL INSERTS/UPDATES都不会被提交。如果您想回滚事务,您可以调用ROLLBACK TRANACTION

所以你可以:

Step 01: BEGIN TRANSACTION
Step 02: Perform INSERT Statement.

如果SQL语句成功,您就知道数据库已经启动并且可以访问,这一步已经成功。这只是行还没有提交到数据库。

Step 03: On success of the INSERT statement, then Call the API
Step 04: If API SUCCEEDS then COMMT TRANSACTION.
Step 05: If API FAILS or there is an exception, then ROLLBACK TRANACTION

:

  • 如果SQL语句以任何方式失败(DB down, T-SQL错误等),您将提前退出
  • 如果API调用以任何方式失败,您将提前退出
  • 只在INSERT和API成功时提交SQL语句

如果COMMIT失败

现在,由于电源丢失或网络中断等原因,COMMIT失败的可能性很小。在这种情况下,您需要调用API来删除/停用您刚刚创建的用户。

最新更新