Hello friends,
I got the latest abp.io framework, and connect to oracle 19, it failed to migrate the abp initial database. I got the same qestion as descript in the post:https://abp.io/support/questions/9453/efcore-booloracle--19c-not-boolean-type-abp-vnext-oracle--bool-type-error
then I follow the post, to solve the issue of table AbpBackgroundJobs change the boolean column to number(10), then I got thee erro from next table which has boolean properties. as show:
so my question is, since abp support oracle, I suppose the abp should support oracle out of the box. but now we have change the code to adapt the code to support oracle. and actualy don't know to fix the issue, and it amy bring other issues later,
please help how can I sovle the issue?
14 Answer(s)
-
0
The issue occurs because Oracle does not support the native BOOLEAN type in table columns. When ABP/EF Core tries to create tables with BOOLEAN columns, Oracle throws an error (ORA-00902: invalid datatype).
To resolve this, you must map boolean properties to a supported Oracle type, such as NUMBER(1) or NUMBER(10), instead of BOOLEAN.
ABP provides guidance for Oracle EF Core integration. You should use the Devart provider and follow the official documentation to handle type mapping issues.
Steps to fix:
- In your DbContext, override the OnModelCreating method to map all boolean properties to NUMBER(1) or NUMBER(10).
- Example:
protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); foreach (var entityType in modelBuilder.Model.GetEntityTypes()) { foreach (var property in entityType.GetProperties()) { if (property.ClrType == typeof(bool) || property.ClrType == typeof(bool?)) { property.SetColumnType("NUMBER(1)"); } } } }
- Remove any existing migrations that use BOOLEAN, re-create the migrations, and update the database.
- For more details and official guidance, see:
This approach will allow your ABP application to work with Oracle without manual table edits for every boolean property.
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
-
0
你可以给所有使用bool属性的实体进行配置
这些方法会被所有实体调用 https://abp.io/support/questions/9453/efcore-booloracle--19c-not-boolean-type-abp-vnext-oracle--bool-type-error#answer-3a1a70d6-0e4f-4435-da9e-a3590b6ef483
-
0
-
0
完整的错误/异常信息?
-
0
2025-08-21 17:22:24.459 +08:00 [INF] Started database migrations... 2025-08-21 17:22:26.240 +08:00 [ERR] 2025-08-21 17:22:26.240666 ThreadID:11 (ERROR) OracleRelationalCommand.ExecuteNonQueryAsync() : Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-00904: "FALSE": 标识符无效 ORA-06512: 在 line 2 https://docs.oracle.com/error-help/db/ora-00904/ at OracleInternal.ServiceObjects.OracleConnectionImpl.VerifyExecution(Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, SqlStatementType sqlStatementType, Int32 arrayBindCount, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone) at OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConnectionImpl connectionImpl, Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone) at OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteNonQueryAsync(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, OracleConnection connection, ENQ_RefAndOutParamArgCtx enq_refOutArgCtx, Boolean isFromEF, Boolean bAsync) at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQueryInternalAsync(Boolean bAsync, CancellationToken cancellationToken) at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQueryAsyncHelper(CancellationToken cancellationToken) at Oracle.EntityFrameworkCore.Storage.Internal.OracleRelationalCommandBuilderFactory.OracleRelationalCommandBuilder.OracleRelationalCommand.ExecuteNonQueryAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) 2025-08-21 17:22:26.252 +08:00 [ERR] Failed executing DbCommand (40ms) [Parameters=[], CommandType='"Text"', CommandTimeout='0'] BEGIN EXECUTE IMMEDIATE 'CREATE TABLE "AbpBackgroundJobs" ( "Id" RAW(16) NOT NULL, "ApplicationName" NVARCHAR2(96), "JobName" NVARCHAR2(128) NOT NULL, "JobArgs" NCLOB NOT NULL, "TryCount" NUMBER(5) DEFAULT 0 NOT NULL, "CreationTime" TIMESTAMP(7) NOT NULL, "NextTryTime" TIMESTAMP(7) NOT NULL, "LastTryTime" TIMESTAMP(7), "IsAbandoned" NUMBER(1) DEFAULT False NOT NULL, "Priority" NUMBER(3) DEFAULT 15 NOT NULL, "ExtraProperties" NVARCHAR2(2000) NOT NULL, "ConcurrencyStamp" NVARCHAR2(40) NOT NULL, CONSTRAINT "PK_AbpBackgroundJobs" PRIMARY KEY ("Id") )'; END; 2025-08-21 17:22:26.255 +08:00 [ERR] 2025-08-21 17:22:26.255348 ThreadID:11 (ERROR) OracleExecutionStrategy.ExecuteAsync() : Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-00904: "FALSE": 标识符无效 ORA-06512: 在 line 2 https://docs.oracle.com/error-help/db/ora-00904/ at OracleInternal.ServiceObjects.OracleConnectionImpl.VerifyExecution(Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, SqlStatementType sqlStatementType, Int32 arrayBindCount, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone) at OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConnectionImpl connectionImpl, Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone) at OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteNonQueryAsync(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, OracleConnection connection, ENQ_RefAndOutParamArgCtx enq_refOutArgCtx, Boolean isFromEF, Boolean bAsync) at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQueryInternalAsync(Boolean bAsync, CancellationToken cancellationToken) at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQueryAsyncHelper(CancellationToken cancellationToken) at Oracle.EntityFrameworkCore.Storage.Internal.OracleRelationalCommandBuilderFactory.OracleRelationalCommandBuilder.OracleRelationalCommand.ExecuteNonQueryAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Oracle.EntityFrameworkCore.Storage.Internal.OracleRelationalCommandBuilderFactory.OracleRelationalCommandBuilder.OracleRelationalCommand.ExecuteNonQueryAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Oracle.EntityFrameworkCore.Storage.Internal.OracleRelationalCommandBuilderFactory.OracleRelationalCommandBuilder.OracleRelationalCommand.ExecuteNonQueryAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteAsync(IReadOnlyList
1 migrationCommands, IRelationalConnection connection, MigrationExecutionState executionState, Boolean beginTransaction, Boolean commitTransaction, Nullable
1 isolationLevel, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteAsync(IReadOnlyList1 migrationCommands, IRelationalConnection connection, MigrationExecutionState executionState, Boolean beginTransaction, Boolean commitTransaction, Nullable
1 isolationLevel, CancellationToken cancellationToken) at Oracle.EntityFrameworkCore.Storage.Internal.OracleExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func4 operation, Func
4 verifySucceeded, CancellationToken cancellationToken) 2025-08-21 17:22:26.256 +08:00 [ERR] 2025-08-21 17:22:26.256845 ThreadID:11 (ERROR) OracleExecutionStrategy.ExecuteAsync() : Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-00904: "FALSE": 标识符无效 ORA-06512: 在 line 2 https://docs.oracle.com/error-help/db/ora-00904/ at OracleInternal.ServiceObjects.OracleConnectionImpl.VerifyExecution(Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, SqlStatementType sqlStatementType, Int32 arrayBindCount, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone) at OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConnectionImpl connectionImpl, Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone) at OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteNonQueryAsync(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, OracleConnection connection, ENQ_RefAndOutParamArgCtx enq_refOutArgCtx, Boolean isFromEF, Boolean bAsync) at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQueryInternalAsync(Boolean bAsync, CancellationToken cancellationToken) at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQueryAsyncHelper(CancellationToken cancellationToken) at Oracle.EntityFrameworkCore.Storage.Internal.OracleRelationalCommandBuilderFactory.OracleRelationalCommandBuilder.OracleRelationalCommand.ExecuteNonQueryAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Oracle.EntityFrameworkCore.Storage.Internal.OracleRelationalCommandBuilderFactory.OracleRelationalCommandBuilder.OracleRelationalCommand.ExecuteNonQueryAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Oracle.EntityFrameworkCore.Storage.Internal.OracleRelationalCommandBuilderFactory.OracleRelationalCommandBuilder.OracleRelationalCommand.ExecuteNonQueryAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteAsync(IReadOnlyList1 migrationCommands, IRelationalConnection connection, MigrationExecutionState executionState, Boolean beginTransaction, Boolean commitTransaction, Nullable
1 isolationLevel, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteAsync(IReadOnlyList1 migrationCommands, IRelationalConnection connection, MigrationExecutionState executionState, Boolean beginTransaction, Boolean commitTransaction, Nullable
1 isolationLevel, CancellationToken cancellationToken) at Oracle.EntityFrameworkCore.Storage.Internal.OracleExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func4 operation, Func
4 verifySucceeded, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQueryAsync(IReadOnlyList1 migrationCommands, IRelationalConnection connection, MigrationExecutionState executionState, Boolean commitTransaction, Nullable
1 isolationLevel, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.MigrateImplementationAsync(DbContext context, String targetMigration, MigrationExecutionState state, Boolean useTransaction, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.MigrateImplementationAsync(DbContext context, String targetMigration, MigrationExecutionState state, Boolean useTransaction, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.<>c.<<MigrateAsync>b__22_1>d.MoveNext() --- End of stack trace from previous location --- at Oracle.EntityFrameworkCore.Storage.Internal.OracleExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func4 operation, Func
4 verifySucceeded, CancellationToken cancellationToken) -
0
继续把默认值也改一下
property.SetColumnType("NUMBER(1)"); property.SetDefaultValue(0);
-
0
-
0
-
0
试试
property.SetDefaultValueSql("0");
? -
0
-
0
请通过https://wetransfer.com/ 分享一个模版项目 liming.ma@volosoft.com
-
0
[maliming] said: 请通过https://wetransfer.com/ 分享一个模版项目
liming.ma@volosoft.com您好,项目文件已经邮件发出,请查收
-
0
好的 我会尽快检查它
-
0