Npgsql,连接池已耗尽

Mar*_*cus 5 .net c# postgresql entity-framework npgsql

我从这个 - SemaphoreSlim 开始,以保​​护连接池免遭耗尽,并很快意识到我的问题是,当我处置 DbContext 时,连接不会返回到池中。

考虑到数据库的所有连接都是在 using 语句中完成的,如下所示:

using (var context = ContextFactory.GetContext<PostgreSqlDatabaseContext>(connectionString))
{
    var query = $"SELECT * FROM public.\"MyTable\" WHERE \"MyId\" = '{id}'";
    var result = await context.MyTable.FromSql(query).SingleOrDefaultAsync();
    return result;
}
Run Code Online (Sandbox Code Playgroud)

看起来ContextFactory像这样:

internal class ContextFactory
{
    public static T GetContext<T>(string sqlConnection) where T : DbContext
    {
        var optionsBuilder = new DbContextOptionsBuilder<PostgreSqlDatabaseContext>();
        optionsBuilder.UseNpgsql(sqlConnection);
        return new PostgreSqlDatabaseContext(optionsBuilder.Options) as T;
    }
}
Run Code Online (Sandbox Code Playgroud)

无论我如何处理连接字符串、Enlist=true按照此处建议的设置,或者按照此处SemaphoreSlim建议的方式限制连接,我都会得到相同的结果:

连接池已耗尽,请提高 MaxPoolSize(当前为 20)或超时(当前为 15 秒)

Npgsql作用吗?这里发生了什么?

请注意,我已经读过这个这个,它们并不相同。