public async Task <OperationResult> InsertManyAsync <T>([NotNull] List <T> redisValues, string metricEntity, TimeSpan?longRequestTime = null) where T : ICacheEntity { if (!_connected) { return(new OperationResult(ActionStatus.InternalOptionalServerUnavailable)); } if (redisValues.Count < 0) { return(new OperationResult(ActionStatus.Ok)); } using (_metricsTracingFactory.CreateTracingWithLoggingMetricsTimer( GetTracingInfo(redisValues.FirstOrDefault()?.GetKey()), metricEntity, requestParams: new { RedisValues = redisValues }, longRequestTime: longRequestTime)) { var insertValues = redisValues.Select(value => new KeyValuePair <RedisKey, RedisValue>( value.GetKey(), JsonConvert.SerializeObject(value, _serializeSettings))).ToArray(); var result = await ExecuteAsync(async() => await _redisDb.StringSetAsync(insertValues)); return(result); } }
public async Task <OperationResult <List <T> > > ExecuteListAsync <T>( string procedureName, DynamicParameters parameters, string metricEntity, TimeSpan?longTimeRequest = null) { try { using (_metricsTracingFactory.CreateTracingWithLoggingMetricsTimer(GetTracingInfo(procedureName), metricEntity, procedureName, new { StoredProcedure = procedureName, Parameters = parameters }, longTimeRequest)) { var timeout = GetTimeOut(procedureName); using (var connection = new SqlConnection(_options.ConnectionString)) { await connection.OpenAsync(); using var reader = await connection.QueryMultipleAsync( procedureName, parameters, commandType : CommandType.StoredProcedure, commandTimeout : timeout); return(new OperationResult <List <T> >((await reader.ReadAsync <T>()).AsList())); } } } catch (Exception e) { LogWithParameters(e, procedureName, metricEntity, parameters); return(new OperationResult <List <T> >(ActionStatus.InternalServerError, e.Message)); } }