Core package: RepoDb v1.16.0
This is the biggest release in RepoDB's history since the last major release. It transforms RepoDB from a SQL Server/PostgreSQL/MySQL/SQLite hybrid-ORM into a genuine universal data connectivity platform, adding nine new database providers and native Bulk capabilities for MySQL and MySqlConnector — while also tightening up core conversion/validation behavior in ways that are intentionally breaking for a small number of call sites.
📋 Table of Contents
- Highlights
- New Database Provider Support
- New Bulk Capabilities for MySQL / MySqlConnector
- 💥 Breaking Changes
⚠️ Known Limitations- 🏢 Enterprise Readiness
🎯 Highlights
| Area | What's new |
|---|---|
| 🌐 Provider coverage | 9 brand-new DB providers: ClickHouse, DB2, EnterpriseDB, Firebird, MariaDB, MariaDB Connector, Oracle, SAP HANA, Vertica |
| 🚛 Bulk operations | Every one of the 9 new providers ships with a matching .BulkOperations package (BulkInsert/BulkMerge/BulkUpdate/BulkDelete/BulkDeleteByKey), plus brand-new Bulk support for MySQL and MySqlConnector |
| 💥 Core breaking changes | Reworked type-conversion/InvalidCastException behavior, a now-required where argument on several aggregate operations |
⚙️ New IDbSetting extensibility |
RequiresDbTypeBeforeValue, SkipsUnreferencedParameters, MaxParameterCount, MultiStatementSeparator, SqlTextParameterPrefix, IsTransactionSupported — groundwork that makes provider-specific quirks (Vertica, Firebird, Db2, ClickHouse, ...) first-class instead of hacked around |
| 📖 Enterprise readiness | Documented Benchmarks, Security Policy, Packages & Build Status, Contributing & Copyright Attribution |
RepoDB is evolving from an ORM into a broader data productivity platform — see the roadmap article.
🌐 New Database Provider Support
Every new provider below ships in two flavors — a core provider package (RepoDb.<Provider>) and a companion RepoDb.<Provider>.BulkOperations package — and follows the same shape: an IDbSetting, a StatementBuilder, a DbHelper, resolvers/property handlers for provider-specific type quirks, and parameter attributes mirroring the underlying driver's parameter object.
⚠️ Verification status — most of these are alpha/preview releases. Several packages are explicitly flagged in their own release notes as "implemented and reviewed, but not yet exercised against a live instance." Read each provider's Known Limitations before adopting it in production.
🟧 ClickHouse
RepoDb.ClickHouse (Preview, released 2026-08-30) + RepoDb.ClickHouse.BulkOperations, built on ClickHouse.Driver v1.3.0. Targets .NET 8/9/10.
ClickHouseConnection/ClickHouseCommand/ClickHouseTransactionRepoDB-aware wrappers;ClickHouseCommandstrips RepoDB's@parameter prefix since the driver expects unprefixed names.LIMIT/LIMIT ... OFFSETpaging,ALTER TABLE ... UPDATE/DELETEmutations for Update/Delete, plainINSERTfor Merge (dedup deferred to the table engine, e.g.ReplacingMergeTree).- Bulk package built on the driver's native
Copy.ClickHouseBulkCopy, withClickHouseBulkDbSetting.IsWaitForMutationsEnabledto opt into blocking until a mutation completes. - No identity/auto-increment mechanism at all — a hard architectural constraint, not a gap.
🔵 DB2
RepoDb.Db2 (v0.0.1-beta2, released 2026-08-23) + RepoDb.Db2.BulkOperations, built on IBM's Net.IBM.Data.Db2 v9.0.0.400/v10.0.0.200. Targets Db2 LUW 10.5+, .NET 8/9/10.
OFFSET ... FETCH NEXTpaging, hand-builtMERGE INTO ... USING (SELECT ... FROM SYSIBM.SYSDUMMY1)for Merge/MergeAll, genuine multi-rowVALUES (...), (...)for InsertAll, identity retrieval viaSELECT ... FROM FINAL TABLE (INSERT ...).- Bulk package adds
Db2BulkArrayBinder, an async array-bind alternative toDB2BulkCopyfor true async bulk loads. - Connection string requirement:
HostVarParameters=True;must be set, otherwise every parameterized call fails withSQL0313N.
🐘 EnterpriseDB
RepoDb.EnterpriseDb (v0.0.1-alpha, Preview) + RepoDb.EnterpriseDb.BulkOperations, built on the Npgsql-backed RepoDb.Connector.EnterpriseDb for EDB Postgres Advanced Server. Targets .NET 8 and .NET 10.
INSERT ... ON CONFLICT DO UPDATEfor Merge/MergeAll (withOVERRIDING SYSTEM VALUEfor explicit identity inserts),RESTART IDENTITYfor Truncate.- Bulk package built on
EDBBulkCopy(Npgsql's native binaryCOPYprotocol) — a genuine bulk load, not a row-by-row loop. - Targets EDB Postgres Advanced Server specifically — not a general-purpose PostgreSQL provider (use
RepoDb.PostgreSqlfor community Postgres).
🔥 Firebird
RepoDb.Firebird (v0.0.1-alpha, released 2026-08-29) + RepoDb.Firebird.BulkOperations, built on FirebirdSql.Data.FirebirdClient v10.3.4. Targets Firebird 3.0+, netstandard2.0, .NET 8/9/10.
FIRST n/FIRST m SKIP npaging, nativeRETURNINGclause,UPDATE OR INSERT INTO ... MATCHING (...) RETURNING ...for Merge (falling back to anEXECUTE BLOCKwhen identity is itself a qualifier).- Bulk package built on
FbBatchCommand(the driver's native ADO.NET batching API) viaFirebirdCommandBatcher. - Requires Firebird 3.0+ — identity-column introspection depends on
RDB$IDENTITY_TYPE, unavailable on 2.5 and earlier.
🦭 MariaDB
RepoDb.MariaDb (v0.0.1-alpha1, Preview) + RepoDb.MariaDb.BulkOperations, built on the MySql.Data-based RepoDb.Connector.MariaDb. Targets .NET Standard 2.0, .NET 8/9/10.
INSERT ... ON DUPLICATE KEY UPDATEfor Merge/MergeAll, identity retrieval viaLAST_INSERT_ID().- Bulk package built on
MariaDbBulkLoader, serializing rows to a tab-delimited file loaded viaLOAD DATA LOCAL INFILE(MySql.Datahas no native streaming bulk-copy API). ⚠️ Install only one ofRepoDb.MariaDborRepoDb.MariaDbConnectorper project — both declare identically-named types (MariaDbConnection,MariaDbBootstrap, etc.), and referencing both causes a hardCS0433compile error.
🦭 MariaDB Connector
RepoDb.MariaDbConnector (v0.0.1-alpha1, Preview) + RepoDb.MariaDbConnector.BulkOperations — the MySqlConnector-based counterpart to RepoDb.MariaDb, built on RepoDb.Connector.MariaDbConnector.
- Shares its SQL-generation layer statement-for-statement with
RepoDb.MariaDb; differs only in the underlying transport — this package uses the connector's own nativeMariaDbBulkCopyinstead ofLOAD DATA LOCAL INFILEfile-staging. - Same identically-named-type conflict applies — don't reference both MariaDB packages in the same project.
🔺 Oracle
RepoDb.Oracle (v0.0.1-beta4, released 2026-08-23) + RepoDb.Oracle.BulkOperations, built on ODP.NET (Oracle.ManagedDataAccess.Core) v23.9.1. Targets Oracle 12c+, .NET 8/9/10.
OFFSET/FETCHpaging, identity retrieval via an Oracle 12c+ implicit result set (DBMS_SQL.RETURN_RESULT) wrapped in an anonymous PL/SQL block.- Bulk package adds
OracleBulkArrayBinder, replacing the earlierWriteToServerAsync(which merely wrapped the sync call) with genuinely asyncExecuteNonQueryAsync-based array binding. - A
RETURNINGclause onMERGEneeds Oracle Database 23ai+ — unavailable on 12c–21c.
🏢 SAP HANA
RepoDb.SapHana (v0.0.1-alpha, Preview) + RepoDb.SapHana.BulkOperations, built on Sap.Data.Hana.Net.v6.0 v2.29.25. Targets .NET 8/9/10.
- ANSI
LIMIT/LIMIT ... OFFSETpaging, nativeUPSERT ... WITH PRIMARY KEYfor Merge/MergeAll. - SAP HANA has no bulk-load API and rejects multi-row
INSERT ... VALUES (...), (...)— every "bulk" write here is a client-buffered loop of single-row parameterizedINSERTs (batched, not truly bulk). SapHanaGuidToStringPropertyHandler(mapsGuid↔NVARCHAR(36)) ships in the Bulk package, not core — install it even if you don't use the bulk operations.
🔻 Vertica
RepoDb.Vertica (v0.0.1-alpha, released 2026-08-31) + RepoDb.Vertica.BulkOperations, built on Vertica.Data v24.3.0. Targets netstandard2.0, .NET 8/9/10.
LIMIT/LIMIT ... OFFSETpaging, genuine multi-rowVALUESfor InsertAll,UPDATE ...; INSERT ... WHERE NOT EXISTS (...)for Merge — never a nativeMERGE, since Vertica rejects that statement outright against any table with anIDENTITY/AUTO_INCREMENTcolumn.- Bulk package built on
VerticaCopyStream(nativeCOPY ... FROM STDINstreaming). - Vertica has no
TRUNCATE TABLEstatement —Truncatecompiles toDELETE FROM tand does not reset identity's next value.
📦 New Bulk Capabilities for MySQL / MySqlConnector
Two brand-new packages bring native Bulk operations to MySQL for the first time:
🐬 RepoDb.MySql.BulkOperations (v0.0.1-alpha1, released 2026-08-08)
BulkInsert, BulkMerge, BulkUpdate, BulkDelete, BulkDeleteByKey (+ Async) against MySqlConnection (MySql.Data), a table name, or a DataTable.
MySql.Dataships no streaming bulk-copy API, so every row-load goes through an internalMySqlBulkCopy— aLOAD DATA LOCAL INFILE-based stand-in, built onMySqlBulkLoader, serializing rows to a temp tab-delimited file.- Requires
AllowLoadLocalInfile=True;AllowUserVariables=True;on the connection string, plus the server'slocal_infileglobal variable enabled. ⚠️ LOAD DATA LOCAL INFILEruns directly against the connection, never through the caller'sMySqlTransaction— a rolled-back transaction will not undo an already-loadedBulkInsert.
🐬 RepoDb.MySqlConnector.BulkOperations (v0.0.1-alpha1, Preview)
BulkInsert, BulkMerge, BulkUpdate, BulkDelete, BulkDeleteByKey (+ Async) against MySqlConnectorConnection, a table name, or a DataTable, with MySqlConnectorBulkImportIdentityBehavior (Unspecified/KeepIdentity/ReturnIdentity).
⚠️ Bulk-load step is agnostic of the caller's transaction — requestReturnIdentityto force the transactional array-bind path if this matters.
Both packages reference RepoDb v1.16.0-alpha2 / RepoDb.MySql(Connector) v1.16.0-alpha1, and neither has been exercised against a live MySQL instance yet — verify the bulk-load path, identity read-back, and staging-table strategy before production use.
💥 Breaking Changes
💥 Core (RepoDb v1.16.0)
- Reworked automatic type-conversion logic in
Converter.ToType<T>(). Anull/DBNullscalar result now raises a clearInvalidCastExceptionnaming the offending value and target type — unlessGlobalConfiguration.Options.ConversionTypeisAutomatic, the target is a reference/by-ref type, or the target isSystem.Object.Exists/ExistsAsyncalways forces automatic conversion (returnsfalseon no match) regardless of the global setting. This affects every sync/async overload of:ExecuteScalar,Average,AverageAll,Count,CountAll,Exists,Max,MaxAll,Min,MinAll,Sum,SumAll. whereargument is now required (no more defaultnull) onAverage,BatchQuery,Count,Max,Min,SkipQuery, andSum— acrossBaseRepository,DbRepository, andDbConnectionextensions. #1266- Deprecated
BaseDbSetting.AverageableType.
💥 RepoDb.SqlServer.BulkOperations
isReturnIdentityis gone from BulkInsert and BulkMerge, replaced by anidentityBehaviorargument typed asSqlServerBulkImportIdentityBehavior. Callers passing aboolneed to switch toSqlServerBulkImportIdentityBehavior.ReturnIdentityor.Unspecified.usePhysicalPseudoTempTableis gone too, replaced by apseudoTableTypeargument typed asSqlServerBulkImportPseudoTableType, across BulkInsert, BulkMerge, BulkUpdate, and BulkDelete. Callers passing aboolneed to switch toSqlServerBulkImportPseudoTableType.Physicalor.Temporary.- The
primaryKeys-based overload ofBulkDeletehas been split out into its ownBulkDeleteByKeymethod. Existing calls toBulkDeletewith a list of primary keys need to move toBulkDeleteByKeyinstead. - On the non-breaking side, a new SqlServerBulkInsertMapItem class brings the same column-mapping API already used by PostgreSQL and Oracle to SQL Server — the base
BulkInsertMapItemclass still works if you're already using it.
💥 RepoDb.MySql / RepoDb.MySqlConnector (v1.16.0)
- Removed the obsolete
MySqlBootstrap.Initialize()method. UseGlobalConfiguration.Setup().UseMySql()instead.
💥 RepoDb.PostgreSql (v1.16.0-beta1)
- Removed the obsolete
PostgreSqlBootstrap.Initialize()method. UseGlobalConfiguration.Setup().UsePostgreSql()instead. RepoDb.PostgreSql.BulkOperationsrenamed its bulk-import enumerations and operation methods —NpgsqlBulkInsertMapItem→PostgreSqlBulkInsertMapItem,BulkImportIdentityBehavior→PostgreSqlBulkImportIdentityBehavior,BulkImportMergeCommandType→PostgreSqlBulkImportMergeCommandType,BulkImportPseudoTableType→PostgreSqlBulkImportPseudoTableType, andBinaryImport/BinaryBulkInsert/BinaryBulkMerge/BinaryBulkDelete/BinaryBulkDeleteByKey→BulkInsert/BulkMerge/BulkDelete/BulkDeleteByKey. Old names are deprecated, not removed — they remain usable as subclasses/aliases for backward compatibility.
🟡 Cross-cutting (non-breaking, but foundational for the providers above)
New IDbSetting extensibility points added in Core and consumed by the new providers:
RequiresDbTypeBeforeValue—DbTypeassigned beforeValue(Vertica needs this).SkipsUnreferencedParameters— skip a bound parameter with no placeholder in the generated SQL (a strict provider otherwise rejects the whole command).MaxParameterCount— caps parameters per generated command (batches largeIN (...)lists); defaults to2098, lowered to1500for Firebird and Vertica.MultiStatementSeparator— customizes the separator used byQueryMultiple/QueryMultipleAsync.SqlTextParameterPrefix— parameter prefix used in raw/text SQL vs. boundDbParameters.IsTransactionSupported— whether the underlying driver supports transaction objects at all.
⚠️ Known Limitations
Full detail lives in limitations.md — summarized here by area.
⚠️ Core
- Composite keys — not supported as a default qualifier; push operations (
Insert,Update,Delete,Merge) use the primary key only. Target composite columns explicitly via expression/dynamic-based calls. - Auto-generated primary column — RepoDB hydrates only the identity column back onto the model; a separately-generated primary/default column (e.g.
UUIDdefaults in MySQL) is not returned. - Computed columns — supported in fluent GET operations, not in fluent PUSH operations by default; use table-targeted methods or explicit
fieldsrestriction instead. - JOIN queries — not supported at all, by design; use
QueryMultiple/ExecuteQueryMultiple/SplitQueryand compose results yourself. - Cache invalidation — no automatic invalidation; cached items expire after 180 minutes by default, or must be removed manually.
- Advanced query-tree expressions — only shallow (first-level) expressions are supported; no 2nd-level-deep member access, unbound expressions, or field-to-field comparisons.
- Multiple identity columns (PostgreSQL allows this) — RepoDB's statement builder only supports one identity column per table; extras are silently excluded from push operations.
⚠️ SQL Server (Bulk)
SqlServerBulkImportPseudoTableType.Autonever resolves toPhysical— a strict-equality bug meansAutoalways behaves likeMemoryregardless of row count, even for million-row loads.- Identity correlation differs by input shape — the
IEnumerable<TEntity>/dictionary overloads correlate by an explicit order column and are safe; theDataTableoverloads ofBulkInsert/BulkMergerely onMERGE'sOUTPUTordering matching insertion order, which SQL Server's optimizer does not guarantee — can silently misassign identities on larger/parallel-plan batches. ReturnIdentityis silently ignored for anonymous types — the merge/insert still runs, but no identity is read back and no exception is raised.- Reflection-based access to
SqlBulkCopyinternals — including a private_rowsCopiedfield — is used as a row-count fallback; a future driver release renaming/removing it would silently degrade rather than fail loudly.
⚠️ Oracle
QueryMultiplecosts N round trips (ODP.NET rejects multi-statement command text).InsertAll/MergeAllexecute one row per round trip today — true batching is planned for later.- Identity retrieval relies on an unverified
DBMS_SQL.RETURN_RESULTPL/SQL-block pattern. RETURNINGonMERGErequires Oracle Database 23ai+.- No native GUID type — map as
byte[]or registerGuidToByteArrayPropertyHandler. OracleBulkCopyis not transaction-aware — a rollback will not undo an already-copied plainBulkInsert. RequestReturnIdentityto force the transactional array-bind path.- Bulk staging:
Memory(GTT) always resolves toPhysical— no session isolation for concurrent callers.
⚠️ DB2
QueryMultiplecosts N round trips;InsertAll/MergeAllare one-row-per-round-trip.- No native GUID type — map as
byte[]or registerDb2GuidToByteArrayPropertyHandler. DB2BulkCopyload step does not honor the caller's transaction; the surrounding DDL and final statement do.- Bulk staging:
Memoryalways resolves toPhysical, and a new staging table is created/dropped on every call (not reused) — concurrent callers against the same table can contend for the same table name. BulkMergewithReturnIdentityis a 3-round-trip, non-atomic sequence with no snapshot isolation between steps.
⚠️ MariaDB / MariaDB Connector
- Install only one of the two packages per project — identical type names across assemblies cause a hard
CS0433compile error. - No native GUID type and no bundled property handler for one — map as
string/byte[], or write your own. RepoDb.MariaDb.BulkOperations'sLOAD DATA LOCAL INFILEload step is not transaction-scoped.- Bulk staging:
Memoryalways resolves toPhysicalin both packages; every call re-creates/drops the staging table (implicit commit on every call, since DDL auto-commits). BulkMergewithReturnIdentityis a 5-statement, non-atomic sequence relying on a session-variable identity pre-assignment seeded from a liveMAX(identity)+1read (deliberately not the cacheableinformation_schemavalue).
⚠️ ClickHouse
- No real transactions —
Commit()/Rollback()are true no-ops; design for idempotent re-runs instead. - No identity/auto-increment mechanism at all —
[Identity]mappings throw; assign keys client-side. Mergeemits a plainINSERT— correctness depends entirely on a deduplicating table engine (e.g.ReplacingMergeTree) and reading back withFINAL/argMax.Updateis an asynchronous mutation (ALTER TABLE ... UPDATE) — returns once queued, not once applied; pollsystem.mutationsif you need to know when it lands.Deleteuses lightweight delete, inconsistently withUpdate's mutation path — verify your server version/engine supports it.- Composite
ORDER BY/PRIMARY KEY— RepoDB's default qualifier only picks the first key column; always passqualifiersexplicitly for composite-keyed tables. - Bulk: no
ReturnIdentityat all (hardNotSupportedException);Autostaging always resolves toPhysical; even explicitMemoryis not truly session-isolated (a plain named table, notCREATE TEMPORARY TABLE); reported row counts forBulkUpdate/BulkDelete/BulkMergeare staged counts, not confirmed-mutated counts.
⚠️ Firebird
- Requires Firebird 3.0+ — identity detection relies on
RDB$IDENTITY_TYPE, absent on 2.5 and earlier. QueryMultiplecosts N round trips;InsertAll/MergeAllare one-row-per-round-trip (batchSize > 1throws).IN (...)lists are hard-capped at 1500 members by the DSQL parser (MaxParameterCount = 1500); manual raw SQL must self-enforce this.Merge/MergeAllfall back to anEXECUTE BLOCKPL/SQL construct when the identity column is itself a qualifier.- No session-wide scope identity, and no
TRUNCATE TABLEstatement (Truncatecompiles to unconditionalDELETE). - No native GUID type; only standard networked (SuperServer) Firebird is tested — not embedded or Classic/SuperClassic.
⚠️ Vertica
Merge/MergeAllcompile a compoundUPDATE ...; INSERT ...statement submitted as one string — unverified against a live instance, and its own remarks noteVerticaCommandmay refuse a parameterized compound statement outright.MergeAll/UpdateAllare one-row-per-round-trip;InsertAllis the one exception (batchable).useInvariantCulture: trueonUseVertica()changesCultureInfo.CurrentCultureprocess-wide, not per-connection.- No table hints, no
TRUNCATE TABLE,MaxParameterCountcapped at 1500, no native GUID property handler. - Bulk: identity read-back relies on an unverified contiguous-assignment back-computation from a single
SELECT LAST_INSERT_ID().
⚠️ SAP HANA
- Every "bulk" write is really a client-buffered loop of single-row
INSERTs — SAP HANA has no native bulk-load API and rejects multi-rowVALUESlists. InsertAll/MergeAll/UpdateAllare one-row-per-round-trip (batchSize > 1throws); no table hints.- No native GUID type — the handler for it (
SapHanaGuidToStringPropertyHandler) ships in the Bulk package, not core. Mergerequires the primary key value already known on the entity — no generate-and-return-in-one-call path.- Bulk staging:
Auto/Memoryalways resolve toPhysical; pseudo-table names are deterministic, not per-call-unique — concurrent same-operation/same-table calls can interfere. - Per the library's own source comments, the
ReturnIdentitycorrelated-COUNTrank computation inBulkMergeis "the least-verified statement in the whole provider."
⚠️ EnterpriseDB
InsertAlldoes not appendRETURNING(EDB rejects it against sub-tableVALUES) — generated identities are only returned viaInsertor the Bulk package.- No table hints of any kind.
- No CLR representation for PostgreSQL geometric types,
pg_lsn,tid, or text-search types — these resolve toobject. - Targets EDB Postgres Advanced Server specifically, not community PostgreSQL.
- Bulk: pseudo-table names are deterministic, not per-call-unique; prefer
MemoryoverPhysicalfor concurrent bulk operations against the same table.
🏢 Enterprise Readiness
If your organization is evaluating or adopting RepoDB for production use, keep the following in mind (from the project's Enterprise Notice):
📊 Benchmarks
Independent, reproducible BenchmarkDotNet-based benchmarks compare RepoDB against Dapper, Entity Framework Core, Linq2Db, and NHibernate across every supported provider (CRUD, Batch, and Bulk categories, at 10/100/1000 row scales). All benchmark projects live in src/Benchmarks and are fully open — clone and run them against your own infrastructure rather than trusting numbers produced on the project's own CI/Docker environment. Every one of the 9 new providers already has a dedicated benchmark project (RepoDb.Benchmarks.<Provider>).
🔒 Security
RepoDB's Security Policy is explicit that this is a single-maintainer project, not a vendor with an SLA:
- Only the latest published release of each package receives security fixes — there is no backport policy.
- Report vulnerabilities privately via email (
[SECURITY]subject line) — no public issues, no bug bounty program. - Documented risk areas: raw-SQL execution (parameterize always), no credential storage/logging, reflection-based access to non-public provider-driver internals (see the SQL Server limitation above), no automated dependency-vulnerability scanning across third-party drivers, and continuous CI testing rather than a formal third-party security audit.
📦 Packages & Build Status
The full package matrix — Core, all provider packages, all Bulk-operations add-ons, and Telemetry — with live NuGet version/downloads badges and per-package CI build status, is maintained in PACKAGES.md. It now lists 14 provider packages and 14 matching Bulk-operations packages, up from 5 of each before this release.
🤝 Contributing & Copyright Attribution
CONTRIBUTING.md covers how to get involved — code (via for grabs issues), bug reports, proposals, documentation, and community support. Notably:
- Every source file must carry a copyright header. New files use:
#region Copyright Attributions // Copyright (c) 2026 John Smith. // Licensed under the Apache License, Version 2.0. // See the LICENSE file in the project root for full license information. #endregion - Existing files being modified (not created) keep their existing attribution as-is — GitHub's own history already tracks subsequent contributions once a header is applied.
- Licensed under Apache-2.0, © 2018 Michael Camara Pendon — forever free and open source.
⚖️ Additional enterprise notes
- No formal versioning/breaking-change policy — only the latest release gets fixes; pin exact versions and review release notes before upgrading.
- No formal governance yet — single-maintainer bus-factor risk should be weighed in your adoption planning.
- Support follows a documented Support Policy, not an enterprise SLA.
Release Checklist — All NuGet Packages
Every project with a .github/workflows/release-*.yml (i.e. every project that actually produces a published NuGet package). "Next Version" is based on each package's latest version currently on nuget.org:
- v1.0.0 — packages that have never had a stable release (still sitting on a
0.0.1-alpha/-betaprerelease on nuget.org), e.g. RepoDb.Db2. - v1.16.0 — established packages already on the
1.xrelease train (currently at a1.16.0-betaNprerelease on nuget.org), moving to the next stable release alongside RepoDb core.
"Dependency Overrides" is the value to pass as the dependency-overrides workflow input (each release-*.yml's -p: MSBuild property list) so its local ProjectReferences get stamped with the version they're actually being released at this run, rather than inheriting this package's own -p:Version. Only needed when a dependency isn't being released at the same version in the same run — since it always is here, every row below fills it in.
| Project Name | NuGet Name | Next Version | Dependency Overrides |
|---|---|---|---|
| RepoDb | RepoDb | 1.16.0 | — |
| RepoDb.ClickHouse | RepoDb.ClickHouse | 1.0.0 | RepoDbCoreVersion=1.16.0 |
| RepoDb.ClickHouse.BulkOperations | RepoDb.ClickHouse.BulkOperations | 1.0.0 | RepoDbCoreVersion=1.16.0;RepoDbClickHouseVersion=1.0.0 |
| RepoDb.Db2 | RepoDb.Db2 | 1.0.0 | RepoDbCoreVersion=1.16.0 |
| RepoDb.Db2.BulkOperations | RepoDb.Db2.BulkOperations | 1.0.0 | RepoDbCoreVersion=1.16.0;RepoDbDb2Version=1.0.0 |
| RepoDb.EnterpriseDb | RepoDb.EnterpriseDb | 1.0.0 | RepoDbCoreVersion=1.16.0 |
| RepoDb.EnterpriseDb.BulkOperations | RepoDb.EnterpriseDb.BulkOperations | 1.0.0 | RepoDbCoreVersion=1.16.0;RepoDbEnterpriseDbVersion=1.0.0 |
| RepoDb.Firebird | RepoDb.Firebird | 1.0.0 | RepoDbCoreVersion=1.16.0 |
| RepoDb.Firebird.BulkOperations | RepoDb.Firebird.BulkOperations | 1.0.0 | RepoDbCoreVersion=1.16.0;RepoDbFirebirdVersion=1.0.0 |
| RepoDb.MariaDb | RepoDb.MariaDb | 1.0.0 | RepoDbCoreVersion=1.16.0 |
| RepoDb.MariaDb.BulkOperations | RepoDb.MariaDb.BulkOperations | 1.0.0 | RepoDbCoreVersion=1.16.0;RepoDbMariaDbVersion=1.0.0 |
| RepoDb.MariaDbConnector | RepoDb.MariaDbConnector | 1.0.0 | RepoDbCoreVersion=1.16.0 |
| RepoDb.MariaDbConnector.BulkOperations | RepoDb.MariaDbConnector.BulkOperations | 1.0.0 | RepoDbCoreVersion=1.16.0;RepoDbMariaDbConnectorVersion=1.0.0 |
| RepoDb.MySql | RepoDb.MySql | 1.16.0 | RepoDbCoreVersion=1.16.0 |
| RepoDb.MySql.BulkOperations | RepoDb.MySql.BulkOperations | 1.16.0 | RepoDbCoreVersion=1.16.0;RepoDbMySqlVersion=1.16.0 |
| RepoDb.MySqlConnector | RepoDb.MySqlConnector | 1.16.0 | RepoDbCoreVersion=1.16.0 |
| RepoDb.MySqlConnector.BulkOperations | RepoDb.MySqlConnector.BulkOperations | 1.16.0 | RepoDbCoreVersion=1.16.0;RepoDbMySqlConnectorVersion=1.16.0 |
| RepoDb.Oracle | RepoDb.Oracle | 1.0.0 | RepoDbCoreVersion=1.16.0 |
| RepoDb.Oracle.BulkOperations | RepoDb.Oracle.BulkOperations | 1.0.0 | RepoDbCoreVersion=1.16.0;RepoDbOracleVersion=1.0.0 |
| RepoDb.PostgreSql | RepoDb.PostgreSql | 1.16.0 | RepoDbCoreVersion=1.16.0 |
| RepoDb.PostgreSql.BulkOperations | RepoDb.PostgreSql.BulkOperations | 1.16.0 | RepoDbCoreVersion=1.16.0;RepoDbPostgreSqlVersion=1.16.0 |
| RepoDb.SapHana | RepoDb.SapHana | 1.0.0 | RepoDbCoreVersion=1.16.0 |
| RepoDb.SapHana.BulkOperations | RepoDb.SapHana.BulkOperations | 1.0.0 | RepoDbCoreVersion=1.16.0;RepoDbSapHanaVersion=1.0.0 |
| RepoDb.Sqlite.Microsoft | RepoDb.Sqlite.Microsoft | 1.16.0 | RepoDbCoreVersion=1.16.0 |
| RepoDb.SqlServer | RepoDb.SqlServer | 1.16.0 | RepoDbCoreVersion=1.16.0 |
| RepoDb.SqlServer.BulkOperations | RepoDb.SqlServer.BulkOperations | 1.16.0 | RepoDbCoreVersion=1.16.0;RepoDbSqlServerVersion=1.16.0 |
| RepoDb.Telemetry.Core | RepoDb.Telemetry.Core | 1.0.0 | RepoDbCoreVersion=1.16.0 |
| RepoDb.Telemetry.Default | RepoDb.Telemetry.Default | 1.0.0 | RepoDbCoreVersion=1.16.0;RepoDbTelemetryCoreVersion=1.16.0 |
| RepoDb.Vertica | RepoDb.Vertica | 1.0.0 | RepoDbCoreVersion=1.16.0 |
| RepoDb.Vertica.BulkOperations | RepoDb.Vertica.BulkOperations | 1.0.0 | RepoDbCoreVersion=1.16.0;RepoDbVerticaVersion=1.0.0 |
Compiled from the releases documentation, limitations.md, and the RepoDB root README.md, PACKAGES.md, SECURITY.md, and CONTRIBUTING.md.