Даппер не закрывает соединение - ядро ​​aspnet / Oracle - PullRequest
0 голосов
/ 07 марта 2019

Я делаю некоторые тесты с Dapper, но есть странная ошибка.

Даже с оператором using, если я не вызываю базу данных в течение некоторого времени, например 5 минут, следующий вызов дает мне «не вошел», следующий вызов работает.

Я создал планировщик, который вызывает БД каждую минуту и ​​не имел ошибки, если я делал то же самое, каждые 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 голосов
/ 08 марта 2019

Проблема была в базе данных Oracle. Пользователь, которого я использовал, находился в профиле с максимальным временем простоя ровно 5 минут.

Итак, решение состоит в том, чтобы настроить время ожидания соединения пула Oracle меньше, чем максимальное время простоя профиля базы данных.

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

...