dotnet/efcore · error · InvalidOperationException

Query precompilation failed with errors:

Error message

Query precompilation failed with errors:

What it means

Thrown by DbContextOperations.PrecompileQueries when GeneratePrecompiledQueries populates the precompilationErrors list (count > 0). Unlike project compile errors, these are failures produced by the query-precompilation engine itself while transforming the context's queries into generated C#. All errors are aggregated into the thrown message.

Source

Thrown at src/EFCore.Design/Design/Internal/DbContextOperations.cs:409

            compilation,
            syntaxGenerator,
            context,
            memberAccessReplacements,
            precompilationErrors,
            generatedFileNames,
            assembly: _assembly,
            suffix);

        if (precompilationErrors.Count > 0)
        {
            var errorBuilder = new StringBuilder();
            errorBuilder.AppendLine(DesignStrings.QueryPrecompilationErrors);
            foreach (var error in precompilationErrors)
            {
                errorBuilder.AppendLine(error.ToString());
            }

            throw new InvalidOperationException(errorBuilder.ToString());
        }

        var writtenFiles = new List<string>();
        return CompiledModelScaffolder.WriteFiles(generatedFiles, outputDir);
    }

    private string? GetNamespaceFromOutputPath(string directoryPath)
    {
        var subNamespace = SubnamespaceFromOutputPath(_projectDir, directoryPath);
        return string.IsNullOrEmpty(subNamespace)
            ? _rootNamespace
            : string.IsNullOrEmpty(_rootNamespace)
                ? subNamespace
                : _rootNamespace + "." + subNamespace;
    }

    // if outputDir is a subfolder of projectDir, then use each subfolder as a sub-namespace
    // --output-dir $(projectFolder)/A/B/C

View on GitHub (pinned to dbf9771522)

Solutions

  1. Read each error in the aggregated message to identify the failing query and simplify/rewrite that query.
  2. Ensure the EF Core runtime and EFCore.Design versions match exactly.
  3. Try the latest EF Core version; precompilation support is actively expanding.
  4. If a specific query cannot be precompiled, exclude it from precompilation or report the issue to the EF Core team with a repro.

Example fix

// before - a query fails to precompile
dotnet ef dbcontext optimize --precompile-queries  # 'Query precompilation failed with errors:'

// after - identify the failing query from the message, simplify it, then retry
// e.g. replace an unsupported GroupBy variant with a supported form
Defensive patterns

Strategy: try-catch

Try / catch

try { ops.Optimize(..., precompileQueries: true, ...); }
catch (InvalidOperationException ex) when (ex.Message.Contains("Query precompilation failed"))
{
    // parse the aggregated errors, simplify/rewrite the offending query, then retry
}

Prevention

When it happens

Trigger: Running query precompilation on a project that compiles fine but whose queries cannot be precompiled by the EF Core precompilation code generator. Each error in the list represents a specific query/transformation that failed during generation.

Common situations: Using query patterns the precompiler does not yet support. A bug or limitation in the precompiled-query code generator for the active provider. Version mismatch between the EF Core runtime and design-time packages. Complex queries with unsupported operators/translations for precompilation.

Related errors


AI-assisted analysis of dotnet/efcore@dbf9771522 (2026-08-06). Data as JSON: /api/errors/d1ffcb11a6f3f492. Report an issue: GitHub.