我们有两个系统,一个身份管理系统处理身份验证,另一个是用户访问的应用程序(比如UserApp)(网站)。当用户注册时,在身份管理系统和UserApp数据库中创建用户帐户。数据应该在这两个系统之间保持同步。因此,当用户注册
时,当前代码执行以下操作- 数据被插入数据库(使用实体框架)
- 使用API调用在IAM中创建帐户
场景:
- 如果数据库插入失败,则不调用API
- 如果数据库插入成功,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来删除/停用您刚刚创建的用户。