mor*_*ode 5 c# entity-framework transactions atomic entity-framework-6
我想做以下事情:
如果插入失败,则不会执行任何操作,所有内容都会回滚。问题是如果事务提交失败,我没有一个好的方法来回滚 API 请求,因为它不是数据库操作。我唯一能想到的就是从端点删除数据。有没有更好的办法?我正在使用实体框架。谢谢。
因此,如果我理解正确的话,您只想在 API 调用成功时提交到数据库,但在数据库从数据库插入生成主键之前无法调用 API。
因此,这将导致一种两阶段提交类型的方法,但是如果插入成功,API 调用成功,但数据库提交失败,会发生什么?(如果发生的话!)
因此,我认为你应该考虑改为实现Saga 设计模式。
这是针对复杂的分布式系统设计的,特别是使用微服务时,您需要确保不同分布式系统之间的数据一致性。基本上,您构建了一种需要按顺序执行的交易链。然后,您将逐一检查它们,如果成功,则继续进行下一个。
但是,对于每笔交易,您还有一笔补偿交易。因此,如果一笔交易失败,那么您将通过列表向后工作,一一执行所有补偿交易,直到最终获得相同的初始状态。
有不同的方法可以做到这一点,例如基于编排的传奇或基于编排的传奇。您可以在这里找到更多详细信息和更好的解释: https: //microservices.io/patterns/data/saga.html