我正在使用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
答案 0 :(得分:0)
问题出在Oracle数据库中。 我曾经使用的用户位于一个配置文件中,该配置文件中的空闲最大时间恰好为5分钟。
因此,解决方案是将Oracle池的“连接超时”配置为小于数据库配置文件的最大空闲时间。
https://docs.oracle.com/cd/B19306_01/win.102/b14307/featConnecting.htm