-
Notifications
You must be signed in to change notification settings - Fork 3.3k
Description
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