在 ASP.NET Core 6 中使用 EF Core 6 时,如果出现如下错误:
System.InvalidOperationException: The current transaction cannot be committed or rolled back because it has not yet been begun.。
您需要确保使用合适的事务范围。以下是一个可能的解决方案:
using (var scope = serviceProvider.CreateScope())
{
var dbContext = scope.ServiceProvider.GetRequiredService();
using (var dbTransaction = dbContext.Database.BeginTransaction())
{
try
{
// perform some database operations
dbContext.SaveChanges();
dbTransaction.Commit();
}
catch (Exception)
{
dbTransaction.Rollback();
throw;
}
finally
{
dbTransaction.Dispose();
}
}
}
在此示例中,我们创建了一个作用域并从中获取了我们的数据库上下文。然后,我们开始一个数据库事务,并在其中执行一些数据库操作。如果操作成功,我们会提交事务并清理资源。但是,如果出现异常,我们会回滚事务并向上抛出异常,由调用方处理。
这是一个简单的解决方案,但它可能会有所帮助,如果您在使用 EF Core 6 和 ASP.NET Core 6 时遇到了事务异常。