Beispiel #1
0
        public Task DoWithoutTransactionAsync(Action <TModel> action, RetryParams retryParams)
        {
            var policy = MakeRetryPolicy(retryParams);

            return(policy.ExecuteAsync(() =>
            {
                using (var shortLivedModel = factory())
                {
                    action(shortLivedModel);
                }

                return Task.FromResult(Resources.Database_Action_Completed);
            }));
        }
Beispiel #2
0
        public async Task <TResult> QueryAsync <TResult>(Func <TModel, TResult> query,
                                                         RetryParams retryParams)
        {
            if (model == null)
            {
                throw new NullReferenceException("The Model has been disposed.");
            }

            var policy = MakeRetryPolicy(retryParams);

            return(await policy.ExecuteAsync(() => Task.Run(() =>
            {
                var result = query(model);
                if (disposeOnCompleted)
                {
                    model.Dispose();
                    model = default(TModel);
                }
                return result;
            })).ConfigureAwait(false));
        }
Beispiel #3
0
        private static RetryPolicy <SqlDatabaseTransientErrorDetectionStrategy> MakeRetryPolicy(RetryParams retry)
        {
            var policy = new RetryPolicy <SqlDatabaseTransientErrorDetectionStrategy>(
                retry.MaxRetries,
                TimeSpan.FromMilliseconds(retry.MinBackOffDelayInMilliseconds),
                TimeSpan.FromMilliseconds(retry.MaxBackOffDelayInMilliseconds),
                TimeSpan.FromMilliseconds(retry.DeltaBackOffInMilliseconds));

            return(policy);
        }
Beispiel #4
0
        public Task DoAsync(Action <TModel> action, RetryParams retryParams)
        {
            var policy = MakeRetryPolicy(retryParams);

            return(policy.ExecuteAsync(() => ExecuteWithTransaction(action)));
        }
Beispiel #5
0
        public async Task <TResult> QueryAsync <TResult>(IDatabaseQuery <TResult, TModel> query, RetryParams retryParams)
        {
            var key = model.CacheHint(query) + cacheHint;

            if (Debugger.IsAttached)
            {
                Trace.WriteLine(string.Format(CultureInfo.InvariantCulture, "{0}Hashed CacheHint :{0}{1}", Environment.NewLine, key));
            }

            if (cache.Contains(key))
            {
                return(GetFromCache <TResult>(key));
            }

            if (Debugger.IsAttached)
            {
                Trace.WriteLine(string.Format(CultureInfo.InvariantCulture, "{0}Query result from server{0}", Environment.NewLine));
            }

            var entities = await model.QueryAsync(query, retryParams)
                           .ConfigureAwait(false);

            cache.Add(new CacheItem(key, entities), cacheItemPolicy);

            return(entities);
        }