假设我有一个实体,它在 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()
}
}
}
什么是处理重试过程的干净方法?