/// <summary> /// Notifies interceptor about QueryCreating stage in query execution. /// </summary> /// <param name="e"> /// The <see cref="LogicSoftware.DataAccess.Repository.Extended.Events.QueryCreatingEventArgs"/> instance containing the event data. /// </param> /// <param name="context"> /// The context. /// </param> /// <returns> /// <c>true</c>, if at least one interceptor has been executed, <c>false</c> otherwise. /// </returns> public bool OnQueryCreating(QueryCreatingEventArgs e, QueryContext context) { if (context == null) { throw new ArgumentNullException("context"); } // no suitable interceptors found if (context.Interceptors.Count == 0) { return(false); } // intercept context.Interceptors.ForEach(pair => pair.Value.OnQueryCreating(e)); return(true); }
public TResult Execute <TResult>(QueryContext context) { if (context == null) { throw new ArgumentNullException("context"); } this.ExtensionsProvider.InitializeQueryContext(context); // first pass. processing all extension-specific method calls only Expression firstPassOutputExpression = this.Visit(context.Expression, context); // QueryCreating stage var queryCreating = new QueryCreatingEventArgs(firstPassOutputExpression); this.ExtensionsProvider.OnQueryCreating(queryCreating, context); // LoadOptionsCreating stage var loadOptionsCreating = new LoadOptionsCreatingEventArgs(queryCreating.Expression, new LoadOptions()); this.ExtensionsProvider.OnLoadOptionsCreating(loadOptionsCreating, context); // getting original query from repository var originalQuery = this.Repository.All(context.ElementType, loadOptionsCreating.LoadOptions); // QueryCreated stage var queryCreated = new QueryCreatedEventArgs(originalQuery); this.ExtensionsProvider.OnQueryCreated(queryCreated, context); // concatenating expression after load options creating event with expression after query created event Expression readyToExecuteExpression = new ExpressionConstantReplacer(context.RootQuery, queryCreated.Query.Expression).Visit(loadOptionsCreating.Expression); // PreExecute stage var preExecute = new PreExecuteEventArgs(readyToExecuteExpression); this.ExtensionsProvider.OnPreExecute(preExecute, context); return(this.ExecuteCore <TResult>(originalQuery, context, preExecute.Expression)); }
/// <summary> /// The QueryCreating stage handler. /// </summary> /// <param name="e"> /// The <see cref="LogicSoftware.DataAccess.Repository.Extended.Events.QueryCreatingEventArgs"/> instance containing the event data. /// </param> /// <remarks> /// Base implementation is empty. /// </remarks> public virtual void OnQueryCreating(QueryCreatingEventArgs e) { }