Dapper无法关闭连接-ASPNET核心/ Oracle

时间:2019-03-07 11:45:45

标签: oracle asp.net-core dapper

我正在使用Dapper进行一些测试,但是有一个奇怪的错误。

即使我有一段时间没有调用数据库,即使使用“ using”语句,例如5分钟后,下一个电话给我一个“未登录”,下个电话有效。

我创建了一个调度程序,该调度程序每分钟调用一次DB,并且没有错误,如果我每5分钟执行一次,则会出现错误。

即使我调用“打开”,“关闭”连接和“使用”,我仍认为连接仍在池中打开。

连接的创建:

protected IDbConnection Connection
{
    get
    {
        var oc = new OracleConnection(DatabaseConfig.ConnectionString);
        oc.Open();
        return oc;
    }
}

方法:

public async Task<List<ItemLista>> GetItemListaAsync(int idLista)
{
    using (var connection = Connection)
    {
        string nomeProcedure = "GC.PCK_ECOM_LISTA_PRESENTE.ILC_LER";

        var parameters = new OracleDynamicParameters();
        parameters.Add("E_TX_GC", dbType: OracleDbType.NVarchar2, size: 4000, direction: ParameterDirection.Output);
        parameters.Add("E_TX_TS", dbType: OracleDbType.NVarchar2, size: 4000, direction: ParameterDirection.Output);
        parameters.Add("P_ID_LISTA_LIC", dbType: OracleDbType.Decimal, value: idLista);
        parameters.Add("R_REF_CUR_ILC", dbType: OracleDbType.RefCursor, direction: ParameterDirection.Output);

        var result = await connection.QueryAsync<ItemLista>(nomeProcedure, parameters, commandType: CommandType.StoredProcedure);
        //this connection.close changes nothing
        connection.Close();
        return result.AsList();
    }
}

Asp.net-core 2.2

Dapper 1.50.5(不能使用1.60.1,因为我正在使用Dapper.fluentMap,但尚不兼容)

Oracle.ManagedDataAccess.Core 2.18.3

1 个答案:

答案 0 :(得分:0)

问题出在Oracle数据库中。 我曾经使用的用户位于一个配置文件中,该配置文件中的空闲最大时间恰好为5分钟。

因此,解决方案是将Oracle池的“连接超时”配置为小于数据库配置文件的最大空闲时间。

https://docs.oracle.com/cd/B19306_01/win.102/b14307/featConnecting.htm