dotnet / dotnet/efcore

precompile queries throws UnreachableException exception.

Open
#37,365 1 comment 0 reactions 0 assignees View on GitHub
area-precompiled-queries customer-reported
Dominant language
C#
Stars
14.8k
Forks
3.4k
PR merge metrics
PR metrics pending

Description

### Question

Windows 11
.NET 10.0.1
Entity Framework Core 10.0.1
dotnet-ef 10.0.1

引数にCancellationTokenを持つメソッドの中で、DbContextを操作するコードを書いて、
dotnet-efを使用して、--precompile-queriesを実行したところ、UnreachableExceptionによるエラーが発生しました。

似た事象は、
https://github.com/dotnet/efcore/issues/35494
で質問されていますが、
https://github.com/dotnet/efcore/issues/35503
で修正済みのように見えます。

以下に、簡易な再現リポジトリを用意しました。
[https://github.com/Empressia/EntityFrameworkCoreTest01](https://github.com/Empressia/EntityFrameworkCoreTest01)

確認してもらえるものでしょうか。

なお、ローカル変数に、一度、代入してから使用すると、発生しないように見えます。

~~~ 以下、翻訳版(Translated version below)~~~

I wrote code that operates on a DbContext inside a method that takes a CancellationToken as a parameter.
When I ran dotnet-ef with the --precompile-queries option, an error occurred due to an UnreachableException.

A similar issue was discussed in:
https://github.com/dotnet/efcore/issues/35494
and it appears to have been fixed in:
https://github.com/dotnet/efcore/issues/35503

I have prepared a minimal reproduction repository below:
https://github.com/Empressia/EntityFrameworkCoreTest01

Could you please take a look?

Additionally, the issue does not seem to occur if the value is first assigned to a local variable and then used.

### Your code

```csharp
dotnet tool install dotnet-ef --local
dotnet build
dotnet dotnet-ef dbcontext optimize --no-scaffold --precompile-queries --nativeaot --no-build
```

### Stack traces

```text
Query precompilation is an experimental feature and should be used with caution.
NativeAOT support is experimental and can change in the future.
System.InvalidOperationException: Query precompilation failed with errors:
QueryPrecompilationError { SyntaxNode = context.Users.OrderBy(u => u.ID).Select(u => u.ID).ToListAsync(cancellationToken), Exception = System.Diagnostics.UnreachableException: IdentifierName of type ParameterSymbol: cancellationToken
at Microsoft.EntityFrameworkCore.Query.Internal.CSharpToLinqTranslator.VisitIdentifierName(IdentifierNameSyntax identifierName)
at Microsoft.CodeAnalysis.CSharp.Syntax.IdentifierNameSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.Visit(SyntaxNode node)
at Microsoft.EntityFrameworkCore.Query.Internal.CSharpToLinqTranslator.Visit(SyntaxNode node)
at Microsoft.EntityFrameworkCore.Query.Internal.CSharpToLinqTranslator.Visit(SyntaxNode node, Type expectedType)
at Microsoft.EntityFrameworkCore.Query.Internal.CSharpToLinqTranslator.VisitArgument(ArgumentSyntax argument, Type expectedType)
at Microsoft.EntityFrameworkCore.Query.Internal.CSharpToLinqTranslator.Visit(SyntaxNode node, Type expectedType)
at Microsoft.EntityFrameworkCore.Query.Internal.CSharpToLinqTranslator.VisitInvocationExpression(InvocationExpressionSyntax invocation)
at Microsoft.CodeAnalysis.CSharp.Syntax.InvocationExpressionSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor`1.Visit(SyntaxNode node)
at Microsoft.EntityFrameworkCore.Query.Internal.CSharpToLinqTranslator.Visit(SyntaxNode node)
at Microsoft.EntityFrameworkCore.Query.Internal.CSharpToLinqTranslator.Translate(SyntaxNode node, SemanticModel semanticModel)
at Microsoft.EntityFrameworkCore.Query.Internal.PrecompiledQueryCodeGenerator.ProcessSyntaxTree(SyntaxTree syntaxTree, SemanticModel semanticModel, IReadOnlyList`1 locatedQueries, List`1 precompilationErrors, String suffix, ISet`1 generatedFileNames, CancellationToken cancellationToken) }

at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.PrecompileQueries(String outputDir, DbContext context, String suffix, IServiceProvider services, IReadOnlyDictionary`2 memberAccessReplacements, ISet`1 generatedFileNames)
at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.Optimize(String outputDir, String modelNamespace, String suffix, Boolean scaffoldModel, Boolean precompileQueries, DbContext context, Boolean optimizeAllInAssembly, Boolean nativeAot, List`1 generatedFiles, HashSet`1 generatedFileNames)
at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.Optimize(String outputDir, String modelNamespace, String contextTypeName, String suffix, Boolean scaffoldModel, Boolean precompileQueries, Boolean nativeAot)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OptimizeContextImpl(String outputDir, String modelNamespace, String contextType, String suffix, Boolean scaffoldModel, Boolean precompileQueries, Boolean nativeAot)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OptimizeContext.<>c__DisplayClass0_0.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
```

### Verbose output

```text

```

### EF Core version

10.0.1

### Database provider

Microsoft.EntityFrameworkCore.Sqlite

### Target framework

.NET 10

### Operating system

Windows11

### IDE

Visual Studio 2026 18.1.0

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.