处理交易错误的最佳方法?



在核心和实体框架中处理事务错误的最佳方法是什么 Asp.net?

此时,我带来了类似的东西:

using (var transaction = _dbContext.Database.BeginTransaction())
{
try
{
await _dbContext.MyTable1.AddAsync(table1Entity);
await _dbContext.SaveChangesAsync();
Entity2 e2 = new Entity2();
e2.Table1Id = table1Entity.Id;
await _dbContext.SaveChangesAsync();
await transaction.CommitAsync();
return new CreatedAtRouteResult(...);
}
catch (Exception ex)
{
System.Console.Write(ex);
await transaction.RollbackAsync();
var context = HttpContext.Features.Get<IExceptionHandlerFeature>();
return Problem(
detail: context.Error.StackTrace,
title: context.Error.Message);
}
}

但真的不知道这是否是一种好的做法。你会怎么做?

您处理事务的方式没有错,但您可以在此处进行一些改进:

  1. 从控制器中删除数据访问代码,并将其移动到单独的类中。
  2. 不要返回错误的技术详细信息,而是返回用户友好的消息。
  3. AddAsync 仅适用于特殊用例,所有其他情况都应使用非异步方法 Add。

从 EF 文档:

"此方法是异步的,仅用于允许特殊值生成器,例如 使用的那个 'Microsoft.EntityFrameworkCore.Metadata.SqlServerValueGenerationStrategy.SequenceHiLo', 以异步访问数据库。对于所有其他情况,非 应使用异步方法。

我认为你的代码很好,除了你不需要调用:

await transaction.RollbackAsync();

在捕获块中。失败的事务将在释放时自动回滚。

链接: https://learn.microsoft.com/en-us/ef/core/saving/transactions

最新更新