Skip to content

Property using Enum with ExecuteUpdateAsync throws 'Object reference not set to an instance of an object.' #35656

@johnwc

Description

@johnwc

Bug description

When running the code below, the error is always thrown. AuthType is a enum type. In ef 8, this worked without an issue. Upgrading to ef 9, now throws an error. If we move the coalesce out to a variable, and use the variable in the method, all works as normal. But this means we now need to pull down a copy of the row to get the value to coalesce with.

Your code

Error

            await _Data.DbContext.ImportJobs
                .Where(q => q.Source.Code == source && q.Id == jobId)
                .ExecuteUpdateAsync(q => q
                .SetProperty(q => q.AuthData, q => authData ?? q.AuthData)
                .SetProperty(q => q.AuthType, q => model.AuthType ?? q.AuthType)
                .SetProperty(q => q.BaseUri, q => model.BaseUri ?? q.BaseUri)
                .SetProperty(q => q.BaseFilter, q => model.BaseFilter ?? q.BaseFilter)
                .SetProperty(q => q.Description, q => model.Description ?? q.Description)
                .SetProperty(q => q.Enabled, q => model.Enabled ?? q.Enabled)
                .SetProperty(q => q.InitialImport, q => model.InitialImport ?? q.InitialImport)
                .SetProperty(q => q.MaxPerRequest, q => model.MaxPerRequest ?? q.MaxPerRequest)
                .SetProperty(q => q.MaxSkip, q => model.MaxSkip ?? q.MaxSkip)
                .SetProperty(q => q.Name, q => model.Name ?? q.Name)
                .SetProperty(q => q.ReplicateApi, q => model.ReplicateApi ?? q.ReplicateApi)
                );


Does not error

var authType = model.AuthType ?? resoJob.AuthType;
            await _Data.DbContext.ImportJobs
                .Where(q => q.Source.Code == source && q.Id == jobId)
                .ExecuteUpdateAsync(q => q
                .SetProperty(q => q.AuthData, q => authData ?? q.AuthData)
                .SetProperty(q => q.AuthType, authType)
                .SetProperty(q => q.BaseUri, q => model.BaseUri ?? q.BaseUri)
                .SetProperty(q => q.BaseFilter, q => model.BaseFilter ?? q.BaseFilter)
                .SetProperty(q => q.Description, q => model.Description ?? q.Description)
                .SetProperty(q => q.Enabled, q => model.Enabled ?? q.Enabled)
                .SetProperty(q => q.InitialImport, q => model.InitialImport ?? q.InitialImport)
                .SetProperty(q => q.MaxPerRequest, q => model.MaxPerRequest ?? q.MaxPerRequest)
                .SetProperty(q => q.MaxSkip, q => model.MaxSkip ?? q.MaxSkip)
                .SetProperty(q => q.Name, q => model.Name ?? q.Name)
                .SetProperty(q => q.ReplicateApi, q => model.ReplicateApi ?? q.ReplicateApi)
                );

Stack traces

at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.ProcessEvaluatableRoot(Expression evaluatableRoot, State& state, Boolean forceEvaluation)
   at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.VisitLambda[T](Expression`1 lambda)
   at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.Visit[T](ReadOnlyCollection`1 expressions, Func`2 elementVisitor, StateType& aggregateStateType, State[]& expressionStates, Boolean poolExpressionStates)
   at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.VisitMethodCall(MethodCallExpression methodCall)
   at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.VisitMethodCall(MethodCallExpression methodCall)
   at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.VisitMethodCall(MethodCallExpression methodCall)
   at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.VisitMethodCall(MethodCallExpression methodCall)
   at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.VisitMethodCall(MethodCallExpression methodCall)
   at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.VisitMethodCall(MethodCallExpression methodCall)
   at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.VisitMethodCall(MethodCallExpression methodCall)
   at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.VisitMethodCall(MethodCallExpression methodCall)
   at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.VisitMethodCall(MethodCallExpression methodCall)
   at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.VisitMethodCall(MethodCallExpression methodCall)
   at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.VisitLambda[T](Expression`1 lambda)
   at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.VisitUnary(UnaryExpression unary)
   at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.Visit[T](ReadOnlyCollection`1 expressions, Func`2 elementVisitor, StateType& aggregateStateType, State[]& expressionStates, Boolean poolExpressionStates)
   at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.VisitMethodCall(MethodCallExpression methodCall)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteCore[TResult](Expression query, Boolean async, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteAsync[TResult](Expression query, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteUpdateAsync[TSource](IQueryable`1 source, Expression`1 setPropertyCalls, CancellationToken cancellationToken)
   at Admin.API.Controllers.JobsController.<UpdateJob>d__3.MoveNext() in D:\source\repos\Portal\src\webapi\Controllers\JobsController.cs:line 188

Verbose output


EF Core version

9.0.2

Database provider

Microsoft.EntityFrameworkCore.SqlServer

Target framework

.Net 8

Operating system

No response

IDE

No response

Metadata

Metadata

Assignees

Type

No fields configured for Bug.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions