2

假设我有一个实体,它在 EF 核心中配置了一个并发令牌列。当由于数据库中的数据发生更改而发生异常时,我想从干净的上下文中重试整个事务。

所有示例都使用以下模式:

using (var context = new PersonContext())
{
     try
     {
       //Business logic
     }
     catch (DbUpdateConcurrencyException ex)
     {
       //Reload/merge entries in ex.Entries, etc...
     }
}

该示例正在运行,但是当 DbContext 注册为范围服务并将其注入存储库并且您有更复杂的场景时,您如何处理此场景。我认为重试整个业务流程比处理冲突更容易。

public class SomeService {
  public SomeService (ISomeRepository repo)
  {
  }

  public Task SomeMethod()
  {
     try
     {
       //Business logic
     }
     catch (DbUpdateConcurrencyException ex)
     {
       //clean context, restart SomeMethod()
     }
  }
}

什么是处理重试过程的干净方法?

4

0 回答 0