Skip to Main Content

ODP.NET

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

No coercion operator is defined between types 'System.Nullable`1[System.Int16]' and 'System.Boolean'. error in EF Core

TridusJun 6 2025

I'm upgrading my client from Oracle.Entityframeworkcore 8.21.170 to 8.23.80 to try to take advantage of the custom scaffolding templates. However, I'm noticing some difference in behaviors that are causing problems. If I just do the version update and don't change my model, everything works fine. If I rescaffold the model, even without custom templates, I notice some changes. In particular, NUMBER(1) fields that used to generate like this:

entity.Property(e => e.PidtypeActiveIndr) 
.HasPrecision(1) 
.HasColumnName("PIDTYPE_ACTIVE_INDR");

Now generate like this:

            entity.Property(e => e.PidtypeActiveIndr)
                .HasColumnType("NUMBER(1)")
                .HasColumnName("PIDTYPE_ACTIVE_INDR");

That doesn't impact anything if the generated property is a boolean, but if it's not the new version simply doesn't work. For example if I have a NUMBER(1) field with values 0-9 in it and thus use a byte or short, I get this when I try to query anything:

System.InvalidOperationException: No coercion operator is defined between types 'System.Nullable`1[System.Int16]' and 'System.Boolean'. 
at System.Linq.Expressions.Expression.GetUserDefinedCoercionOrThrow(ExpressionType coercionType, Expression expression, Type convertToType) 
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.ValueComparerExtensions.ToNullableComparer(ValueComparer valueComparer, Type clrType) 
at Microsoft.EntityFrameworkCore.Metadata.Internal.Property.GetKeyValueComparer() 
at Microsoft.EntityFrameworkCore.Metadata.Internal.Property.GetProviderValueComparer() 
at Microsoft.EntityFrameworkCore.Metadata.Internal.Property.Microsoft.EntityFrameworkCore.Metadata.IProperty.GetProviderValueComparer() 
at Microsoft.EntityFrameworkCore.Infrastructure.ModelValidator.<ValidateTypeMappings>g__Validate|25_0(ITypeBase typeBase, IDiagnosticsLogger`1 logger) 
at Microsoft.EntityFrameworkCore.Infrastructure.ModelValidator.ValidateTypeMappings(IModel model, IDiagnosticsLogger`1 logger) 
at Microsoft.EntityFrameworkCore.Infrastructure.ModelValidator.Validate(IModel model, IDiagnosticsLogger`1 logger) 
at Microsoft.EntityFrameworkCore.Infrastructure.RelationalModelValidator.Validate(IModel model, IDiagnosticsLogger`1 logger) 
at Oracle.EntityFrameworkCore.Infrastructure.Internal.OracleModelValidator.Validate(IModel model, IDiagnosticsLogger`1 logger) 
at Microsoft.EntityFrameworkCore.Infrastructure.ModelRuntimeInitializer.Initialize(IModel model, Boolean designTime, IDiagnosticsLogger`1 validationLogger) 
at Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.GetModel(DbContext context, ModelCreationDependencies modelCreationDependencies, Boolean designTime) 
at Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel(Boolean designTime) 
at Microsoft.EntityFrameworkCore.Internal.DbContextServices.get_Model() 
at Microsoft.EntityFrameworkCore.Infrastructure.EntityFrameworkServicesBuilder.<>c.<TryAddCoreServices>b__8_4(IServiceProvider p) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass2_0.<RealizeService>b__0(ServiceProviderEngineScope scope) 
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(ServiceIdentifier serviceIdentifier, ServiceProviderEngineScope serviceProviderEngineScope) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType) 
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) 
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) 
at Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies() 
at Microsoft.EntityFrameworkCore.DbContext.get_ContextServices() 
at Microsoft.EntityFrameworkCore.DbContext.get_Model() 
at Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.get_EntityType() 
at Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.CheckState() 
at Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.get_EntityQueryable() 
at Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.System.Linq.IQueryable.get_Provider() 
at System.Linq.Queryable.Where[TSource](IQueryable`1 source, Expression`1 predicate) 
at GNB.ELG.Envi.Repository.Internal.Repositories.UserRepository.Staff(String username) in C:\Users\chrise\source\repos\elg-envi-internal-web\GNB.ELG.Envi.Internal\GNB.ELG.Envi.Repository.Internal\Repositories\UserRepository.cs:line 78 
at GNB.ELG.Envi.Business.Internal.Managers.SecurityManager.GetStaff(String username) in C:\Users\chrise\source\repos\elg-envi-internal-web\GNB.ELG.Envi.Internal\GNB.ELG.Envi.Business.Internal\Managers\SecurityManager.cs:line 155 
at GNB.ELG.Envi.Business.Internal.Managers.SecurityManager.get_CurrentUser() in C:\Users\chrise\source\repos\elg-envi-internal-web\GNB.ELG.Envi.Internal\GNB.ELG.Envi.Business.Internal\Managers\SecurityManager.cs:line 167 
at GNB.ELG.Envi.Business.Internal.Managers.SecurityManager.get_StaffId() in C:\Users\chrise\source\repos\elg-envi-internal-web\GNB.ELG.Envi.Internal\GNB.ELG.Envi.Business.Internal\Managers\SecurityManager.cs:line 38 
at GNB.ELG.Envi.Business.Internal.Managers.SecurityManager.get_Roles() in C:\Users\chrise\source\repos\elg-envi-internal-web\GNB.ELG.Envi.Internal\GNB.ELG.Envi.Business.Internal\Managers\SecurityManager.cs:line 47 
at AspNetCoreGeneratedDocument.Views_Shared__Layout.<ExecuteAsync>b__42_1() in C:\Users\chrise\source\repos\elg-envi-internal-web\GNB.ELG.Envi.Internal\GNB.ELG.Envi.Website.Internal\Views\Shared\_Layout.cshtml:line 122 
at Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperExecutionContext.SetOutputContentAsync() 
at AspNetCoreGeneratedDocument.Views_Shared__Layout.ExecuteAsync() 
at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(IRazorPage page, ViewContext context) 
at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(IRazorPage page, ViewContext context, Boolean invokeViewStarts) 
at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderLayoutAsync(ViewContext context, ViewBufferTextWriter bodyWriter) 
at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(ViewContext context) 
at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext viewContext, String contentType, Nullable`1 statusCode) 
at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext viewContext, String contentType, Nullable`1 statusCode) 
at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ActionContext actionContext, IView view, ViewDataDictionary viewData, ITempDataDictionary tempData, String contentType, Nullable`1 statusCode) 
at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ExecuteAsync(ActionContext context, ViewResult result) 
at Microsoft.AspNetCore.Mvc.ViewResult.ExecuteResultAsync(ActionContext context) 
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeResultAsync>g__Logged|22_0(ResourceInvoker invoker, IActionResult result) 
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResultFilterAsync>g__Awaited|30_0[TFilter,TFilterAsync](ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) 
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed context) 
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted) 
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeResultFilters() 
--- End of stack trace from previous location --- 
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) 
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context) 
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) 
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync() 
--- End of stack trace from previous location --- 
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker) 
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker) 
at Microsoft.AspNetCore.Localization.RequestLocalizationMiddleware.Invoke(HttpContext context) 
at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) 
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)

If I comment out .HasColumnType("NUMBER(1)") in the model definition, it seems to work fine. This also comes up when I create custom templates using the example provided on the ODP Github as those don't override anything in the context template, which is where the errant line is.

So I have a workaround right now, but it feels like a regression since this wasn't required in the earlier version.

Thanks.

This post has been answered by Alex Keh-Oracle on Jul 20 2025
Jump to Answer
Comments
Post Details
Added on Jun 6 2025
5 comments
416 views