示例#1
0
        /// <summary>
        /// After a "Patch" request has been processed and the response basket has ascended to here
        /// any cached object and collection which is now invalid is removed from the cache
        /// </summary>
        /// <param name="basket">The response</param>
        /// <param name="visit">The visit the basket is currently making</param>
        /// <returns>A Task that may be awaited</returns>
        public Task AscendFromAsync(IPatchBasket <TId, T> basket, IVisit visit)
        {
            // always remove items from cache on way back up, otherwise another thread
            // may repopulate the cache before the decent is complete
            if (basket?.DescentPayload?.Delta != null)
            {
                Cache.RemoveCollection();
                Cache.Remove(basket.DescentPayload.Delta.Identity);
            }

            return(Task.CompletedTask);
        }
示例#2
0
        /// <summary>
        /// Performs a partial update to a T in the database and sets the baskets AscentPayload to the number of records affected
        /// </summary>
        /// <param name="basket">A basket</param>
        /// <param name="visit">The visit the basket is currently making</param>
        /// <returns>A Task that may be awaited</returns>
        public async Task AddResultAsync(IPatchBasket <TId, T, int> basket, IVisit visit)
        {
            if (basket == null)
            {
                throw new ArgumentNullException(nameof(basket));
            }

            var statement = GetUpdateDbStatement(basket.DescentPayload);

            visit.Log(statement.ToString());

            basket.AscentPayload = await DbInterface.ExecuteNonQueryAsync(statement).ConfigureAwait(false);
        }
示例#3
0
 /// <summary>
 /// No action performed
 /// </summary>
 /// <param name="basket">The request</param>
 /// <param name="visit">The visit the basket is currently making</param>
 /// <returns>A Task that may be awaited</returns>
 public Task DescendToAsync(IPatchBasket <TId, T> basket, IVisit visit)
 {
     return(Task.CompletedTask);
 }
示例#4
0
        public Task AddResultAsync(IPatchBasket <int, Frog, int> basket, IVisit visit)
        {
            basket.AscentPayload = 1;

            return(Task.CompletedTask);
        }
示例#5
0
 public Task <IPatchBasket <TId, T, int> > SendAsync(IPatchBasket <TId, T, int> basket)
 {
     return(new Shaft <IPatchBasket <TId, T, int> >(TraceExporter, TerminalLayer, GetStations <IPatchBasket <TId, T, int> >())
            .SendAsync(basket));
 }
示例#6
0
 public Task <IPatchBasket <int, Frog, int> > SendAsync(IPatchBasket <int, Frog, int> basket)
 {
     return(new Shaft <IPatchBasket <int, Frog, int> >(TerminalLayer)
            .Add(CacheLayer)
            .SendAsync(basket));
 }
示例#7
0
 /// <summary>
 /// Performs no action
 /// </summary>
 /// <param name="basket">A basket</param>
 /// <param name="visit">The visit the basket is currently making</param>
 /// <returns>A Task that may be awaited</returns>
 public Task AscendFromAsync(IPatchBasket basket, IVisit visit)
 {
     return(Task.CompletedTask);
 }
示例#8
0
 /// <summary>
 /// If the user is not allowed to "Patch" T's then an UnauthorizedAccessException will be thrown.
 /// </summary>
 /// <param name="basket">The request</param>
 /// <param name="visit">The visit the basket is currently making</param>
 /// <returns>A Task that may be awaited</returns>
 public Task DescendToAsync(IPatchBasket basket, IVisit visit)
 {
     EnsureOperationAllowed(Operations.Patch, basket, visit);
     return(Task.CompletedTask);
 }