添加日志但无法保存

问题描述 投票:0回答:1

我使用异步添加日志并希望使用异步保存但返回此错误:

'无法访问已处置的上下文实例。导致此错误的一个常见原因是处置从依赖项注入解析的上下文实例,然后尝试在应用程序的其他位置使用相同的上下文实例。如果您在上下文实例上调用“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();
        }
    }
}
c# asp.net-core dependency-injection
1个回答
0
投票

问题是由您拨打

_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;
        }
    }
}

附注下次,请不要发布代码图像。只需发布代码本身即可。

© www.soinside.com 2019 - 2024. All rights reserved.