/// <summary> /// Executes the future queries. /// </summary> /// <param name="context">The <see cref="ObjectContext"/> to run the queries against.</param> /// <param name="futureQueries">The future queries list.</param> public void ExecuteFutureQueries(ObjectContext context, IList <IFutureQuery> futureQueries) { if (context == null) { throw new ArgumentNullException("context"); } if (futureQueries == null) { throw new ArgumentNullException("futureQueries"); } // used to call internal methods dynamic contextProxy = new DynamicProxy(context); contextProxy.EnsureConnection(false); try { using (var command = CreateFutureCommand(context, futureQueries)) using (var reader = command.ExecuteReader()) { foreach (var futureQuery in futureQueries) { futureQuery.SetResult(context, reader); reader.NextResult(); } } } finally { contextProxy.ReleaseConnection(); // once all queries processed, clear from queue futureQueries.Clear(); } }
/// <summary> /// Executes the future queries. /// </summary> /// <param name="context">The <see cref="ObjectContext" /> to run the queries against.</param> /// <param name="futureQueries">The future queries list.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns></returns> public async Task ExecuteFutureQueriesAsync(ObjectContext context, IList <IFutureQuery> futureQueries, CancellationToken cancellationToken = default(CancellationToken)) { if (context == null) { throw new ArgumentNullException("context"); } if (futureQueries == null) { throw new ArgumentNullException("futureQueries"); } // used to call internal methods dynamic contextProxy = new DynamicProxy(context); contextProxy.EnsureConnection(false); //the (internal) InterceptionContext contains the registered loggers DbInterceptionContext interceptionContext = contextProxy.InterceptionContext; try { using (var command = CreateFutureCommand(context, futureQueries)) using (var reader = await DbInterception.Dispatch.Command.ReaderAsync( command, new DbCommandInterceptionContext(interceptionContext), cancellationToken ) .ConfigureAwait(false) ) { foreach (var futureQuery in futureQueries) { await futureQuery.SetResultAsync(context, reader, cancellationToken).ConfigureAwait(false); await reader.NextResultAsync(cancellationToken).ConfigureAwait(false); } } } finally { contextProxy.ReleaseConnection(); // once all queries processed, clear from queue futureQueries.Clear(); } }