我使用异步添加日志并希望使用异步保存但返回此错误:
'无法访问已处置的上下文实例。导致此错误的一个常见原因是处置从依赖项注入解析的上下文实例,然后尝试在应用程序的其他位置使用相同的上下文实例。如果您在上下文实例上调用“Dispose”或将其包装在 using 语句中,则可能会发生这种情况。如果您使用依赖项注入,则应该让依赖项注入容器负责处理上下文实例。 对象名称:'ApplicationDbContext'。'
异常在我调用
_dbContext.SaveChangesAsync
的地方抛出。
这是我的代码:
public class UnitOfWork(ApplicationDbContext dbContext)
{
private readonly ApplicationDbContext _dbContext = dbContext;
public async Task<int> SaveChangesAsync(CancellationToken cancellation)
{
try
{
return await _dbContext.SaveChangesAsync(cancellation);
}
catch (Exception)
{
return 0;
}
finally
{
_dbContext.Dispose();
}
}
}
问题是由您拨打
_dbContext.Dispose()
引起的。一般来说,您不应该处置通过 DI 在构造函数中传递的类,因为您不管理这些对象的生命周期。此外,DI 容器将(或者您的Composition Root 通常应该)管理注入组件的生命周期并确保它们的处置。
相反,请将代码更改为以下内容:
public class UnitOfWork(ApplicationDbContext dbContext)
{
private readonly ApplicationDbContext _dbContext = dbContext;
public async Task<int> SaveChangesAsync(CancellationToken cancellation)
{
try
{
return await _dbContext.SaveChangesAsync(cancellation);
}
catch (Exception)
{
return 0;
}
}
}
附注下次,请不要发布代码图像。只需发布代码本身即可。