Releases for RepoDb.Oracle.BulkOperations
View the NuGet package here or download it directly here.
RepoDb.Oracle.BulkOperations (v0.0.1)
Released: August 1, 2026
New
First release of the bulk operations extension for RepoDb.Oracle, built on ODP.NET’s OracleBulkCopy — the same genuine bulk-load primitive SqlBulkCopy is for SQL Server.
Verification status: this package has been implemented and reviewed, but not yet exercised against a live Oracle instance. Verify the
OracleBulkCopyload path, the array-bind identity read-back, and the staging-table strategy end-to-end before relying on this package in production.
What’s included
- BulkInsert, BulkMerge, BulkUpdate, and BulkDelete, each with an
Asyncoverload, callable against anOracleConnection, a table name, or aDataTable. OracleBulkImportIdentityBehavior(Unspecified,KeepIdentity,ReturnIdentity) — controls whether identity values are sent, ignored, or read back.ReturnIdentityswitchesBulkInsert’s row-load fromOracleBulkCopyto array binding withRETURNING ... INTO, sinceOracleBulkCopycannot report back generated values.OracleBulkImportPseudoTableType(Auto,Memory,Physical) — picks the staging-table strategy used byBulkMerge/BulkUpdate/BulkDelete: a Global Temporary Table, a shared heap table, or automatic selection by row count.OracleBulkInsertMapItem— explicit source-to-destination column mapping forBulkInsert, with an optionalOracleDbTypeoverride.BulkMergecorrelates returned identities back by qualifier after theMERGEcompletes, since Oracle’sRETURNINGclause onMERGEitself requires Oracle Database 23ai+.
Known limitations (v1)
OracleBulkCopyis agnostic of the caller’s transaction — rows it writes commit independently, so a rolled-back transaction will not undo a plainBulkInsert’s already-copied rows. (BulkMerge/BulkUpdate/BulkDeleteare unaffected, since only their staging-table load bypasses the transaction; the finalMERGE/UPDATE/DELETEagainst the real table stays fully transactional.) RequestReturnIdentityto force the transactional array-bind path if this matters for your workload.Memory(Global Temporary Table) staging currently always resolves toPhysical, sinceOracleBulkCopy’s direct-path load cannot write into a GTT.Physicalstaging tables have no per-session isolation — concurrent callers bulk-writing to the same table will race each other’s staged data.The staging table for a given (table name, pseudo table type) combination is created once per process and reused; the first call against it commits any pending work in its transaction, since
CREATE TABLE/CREATE GLOBAL TEMPORARY TABLEis DDL.- Referenced the
RepoDbpackagev1.15.1. - Referenced the
RepoDb.Oraclepackagev0.0.1. - Referenced the
Oracle.ManagedDataAccess.Corepackagev23.9.1.