gpt4 book ai didi

c# - 使 API 调用和数据库操作原子化

转载 作者:行者123 更新时间:2023-12-04 10:15:38 24 4
gpt4 key购买 nike

我想做以下事情:

  • 开始交易
  • 将数据插入数据库
  • 插入后,使用新添加的行的主键将数据提交到 API 端点
  • 然后提交事务

  • 如果插入失败,什么都不会做,一切都会回滚。问题是如果事务提交失败,因为它不是数据库操作,我没有一个很好的方法来回滚 API 请求。我唯一能想到的就是从端点删除数据。有没有更好的办法?我正在使用 Entity Framework 。谢谢。

    最佳答案

    因此,如果我理解正确的话,如果 API 调用成功,您只想提交给数据库,但在您从数据库插入中生成数据库主键之前不能调用 API。

    所以这会导致一种 2 阶段提交类型的方法,但是如果插入成功,API 调用成功,但数据库提交失败,会发生什么? (如果发生!)

    因此,我认为您应该考虑改为实现 传奇设计模式。

    这是为复杂的分布式系统设计的,尤其是使用微服务时,您需要确保不同分布式系统之间的数据一致性。
    基本上,您构建了一种需要按顺序执行的交易链。然后你一个一个地通过它们,如果成功,你就会进入下一个。

    但是,对于每笔交易,您还有一个补偿交易。因此,如果交易失败,那么您可以通过列表向后执行所有补偿交易,直到最后您拥有相同的初始状态。

    有不同的方法可以做到这一点,例如基于编舞的传奇或基于编排的传奇。
    您可以在此处找到更多详细信息和更好的解释:
    https://microservices.io/patterns/data/saga.html

    关于c# - 使 API 调用和数据库操作原子化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61074684/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com