访问DB我在PostgreSQL数据库服务器上运行EF核心的ASP.NET核心应用。我遇到了这个问题:
当我从控制器访问数据库时,一切工作正常。 但是,当我尝试从中间件访问DB,(二者更高的要求负荷下)发生异常:
System.InvalidOperationException: An operation is already in progress.
at Npgsql.NpgsqlConnector.StartUserAction(ConnectorState newState)
at Npgsql.NpgsqlCommand.<ExecuteDbDataReaderInternalAsync>d__4.MoveNext()
...
样品的编号:
DB配置
private void ConfigureDatabase(IServiceCollection services)
{
var connectionString = ConfigObject.Value.DbContextSettings.ConnectionString;
services.AddDbContext<ApplicationDbContext>(opts => opts.UseNpgsql(connectionString));
}
的DbContext
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, Role, Guid>
{
...
public DbSet<SomeItem> SomeItems { get; set; }
...
}
中间件
public async Task Invoke(HttpContext context)
{
var test = await _context.SomeItems.FirstOrDefaultAsync();
}
的控制器
public async Task<SomeItem> GetStuff()
{
return await _context.SomeItems.FirstOrDefaultAsync();
}
我的问题是 - 为什么是控制器能够提供许多异步并发请求和中间件不是?我怎样才能得到它呢?我现在有点失去了异步性和ASP.NET解剖。
预先感谢您。