/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public static void QueryExecutionPlanned( [NotNull] this IDiagnosticsLogger <DbLoggerCategory.Query> diagnostics, [NotNull] IExpressionPrinter expressionPrinter, [NotNull] Expression queryExecutorExpression) { var definition = CoreStrings.LogQueryExecutionPlanned; // Checking for enabled here to avoid printing query model if not needed. if (diagnostics.GetLogBehavior(definition.EventId, definition.Level) != WarningBehavior.Ignore) { definition.Log( diagnostics, expressionPrinter.Print(queryExecutorExpression)); } if (diagnostics.DiagnosticSource.IsEnabled(definition.EventId.Name)) { diagnostics.DiagnosticSource.Write( definition.EventId.Name, new QueryExpressionEventData( definition, QueryExecutionPlanned, queryExecutorExpression, expressionPrinter)); } }
protected virtual Func <QueryContext, TResults> CreateExecutorLambda <TResults>() { var queryExecutorExpression = Expression .Lambda <Func <QueryContext, TResults> >( _expression, QueryContextParameter); var queryExecutor = queryExecutorExpression.Compile(); QueryCompilationContext.Logger.LogDebug( CoreLoggingEventId.QueryPlan, () => { var queryPlan = _expressionPrinter.Print(queryExecutorExpression); return(queryPlan); }); return(queryExecutor); }