예제 #1
0
        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);
            }
        }
예제 #2
0
        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));
            }
        }