Skip to content

RepoDB v1.16 — The Universal Connectivity Release - Phase 1

Latest

Choose a tag to compare

@mikependon mikependon released this 09 Sep 16:30

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

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/ClickHouseTransaction RepoDB-aware wrappers; ClickHouseCommand strips RepoDB's @ parameter prefix since the driver expects unprefixed names.
  • LIMIT/LIMIT ... OFFSET paging, ALTER TABLE ... UPDATE/DELETE mutations for Update/Delete, plain INSERT for Merge (dedup deferred to the table engine, e.g. ReplacingMergeTree).
  • Bulk package built on the driver's native Copy.ClickHouseBulkCopy, with ClickHouseBulkDbSetting.IsWaitForMutationsEnabled to 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 NEXT paging, hand-built MERGE INTO ... USING (SELECT ... FROM SYSIBM.SYSDUMMY1) for Merge/MergeAll, genuine multi-row VALUES (...), (...) for InsertAll, identity retrieval via SELECT ... FROM FINAL TABLE (INSERT ...).
  • Bulk package adds Db2BulkArrayBinder, an async array-bind alternative to DB2BulkCopy for true async bulk loads.
  • Connection string requirement: HostVarParameters=True; must be set, otherwise every parameterized call fails with SQL0313N.

🐘 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 UPDATE for Merge/MergeAll (with OVERRIDING SYSTEM VALUE for explicit identity inserts), RESTART IDENTITY for Truncate.
  • Bulk package built on EDBBulkCopy (Npgsql's native binary COPY protocol) — a genuine bulk load, not a row-by-row loop.
  • Targets EDB Postgres Advanced Server specifically — not a general-purpose PostgreSQL provider (use RepoDb.PostgreSql for 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 n paging, native RETURNING clause, UPDATE OR INSERT INTO ... MATCHING (...) RETURNING ... for Merge (falling back to an EXECUTE BLOCK when identity is itself a qualifier).
  • Bulk package built on FbBatchCommand (the driver's native ADO.NET batching API) via FirebirdCommandBatcher.
  • 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 UPDATE for Merge/MergeAll, identity retrieval via LAST_INSERT_ID().
  • Bulk package built on MariaDbBulkLoader, serializing rows to a tab-delimited file loaded via LOAD DATA LOCAL INFILE (MySql.Data has no native streaming bulk-copy API).
  • ⚠️ Install only one of RepoDb.MariaDb or RepoDb.MariaDbConnector per project — both declare identically-named types (MariaDbConnection, MariaDbBootstrap, etc.), and referencing both causes a hard CS0433 compile 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 native MariaDbBulkCopy instead of LOAD DATA LOCAL INFILE file-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/FETCH paging, 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 earlier WriteToServerAsync (which merely wrapped the sync call) with genuinely async ExecuteNonQueryAsync-based array binding.
  • A RETURNING clause on MERGE needs 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 ... OFFSET paging, native UPSERT ... WITH PRIMARY KEY for 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 parameterized INSERTs (batched, not truly bulk).
  • SapHanaGuidToStringPropertyHandler (maps GuidNVARCHAR(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 ... OFFSET paging, genuine multi-row VALUES for InsertAll, UPDATE ...; INSERT ... WHERE NOT EXISTS (...) for Merge — never a native MERGE, since Vertica rejects that statement outright against any table with an IDENTITY/AUTO_INCREMENT column.
  • Bulk package built on VerticaCopyStream (native COPY ... FROM STDIN streaming).
  • Vertica has no TRUNCATE TABLE statement — Truncate compiles to DELETE FROM t and 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.Data ships no streaming bulk-copy API, so every row-load goes through an internal MySqlBulkCopy — a LOAD DATA LOCAL INFILE-based stand-in, built on MySqlBulkLoader, serializing rows to a temp tab-delimited file.
  • Requires AllowLoadLocalInfile=True;AllowUserVariables=True; on the connection string, plus the server's local_infile global variable enabled.
  • ⚠️ LOAD DATA LOCAL INFILE runs directly against the connection, never through the caller's MySqlTransaction — a rolled-back transaction will not undo an already-loaded BulkInsert.

🐬 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 — request ReturnIdentity to 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>(). A null/DBNull scalar result now raises a clear InvalidCastException naming the offending value and target type — unless GlobalConfiguration.Options.ConversionType is Automatic, the target is a reference/by-ref type, or the target is System.Object. Exists/ExistsAsync always forces automatic conversion (returns false on 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.
  • where argument is now required (no more default null) on Average, BatchQuery, Count, Max, Min, SkipQuery, and Sum — across BaseRepository, DbRepository, and DbConnection extensions. #1266
  • Deprecated BaseDbSetting.AverageableType.

💥 RepoDb.SqlServer.BulkOperations

  • isReturnIdentity is gone from BulkInsert and BulkMerge, replaced by an identityBehavior argument typed as SqlServerBulkImportIdentityBehavior. Callers passing a bool need to switch to SqlServerBulkImportIdentityBehavior.ReturnIdentity or .Unspecified.
  • usePhysicalPseudoTempTable is gone too, replaced by a pseudoTableType argument typed as SqlServerBulkImportPseudoTableType, across BulkInsert, BulkMerge, BulkUpdate, and BulkDelete. Callers passing a bool need to switch to SqlServerBulkImportPseudoTableType.Physical or .Temporary.
  • The primaryKeys-based overload of BulkDelete has been split out into its own BulkDeleteByKey method. Existing calls to BulkDelete with a list of primary keys need to move to BulkDeleteByKey instead.
  • 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 BulkInsertMapItem class still works if you're already using it.

💥 RepoDb.MySql / RepoDb.MySqlConnector (v1.16.0)

  • Removed the obsolete MySqlBootstrap.Initialize() method. Use GlobalConfiguration.Setup().UseMySql() instead.

💥 RepoDb.PostgreSql (v1.16.0-beta1)

  • Removed the obsolete PostgreSqlBootstrap.Initialize() method. Use GlobalConfiguration.Setup().UsePostgreSql() instead.
  • RepoDb.PostgreSql.BulkOperations renamed its bulk-import enumerations and operation methods — NpgsqlBulkInsertMapItemPostgreSqlBulkInsertMapItem, BulkImportIdentityBehaviorPostgreSqlBulkImportIdentityBehavior, BulkImportMergeCommandTypePostgreSqlBulkImportMergeCommandType, BulkImportPseudoTableTypePostgreSqlBulkImportPseudoTableType, and BinaryImport/BinaryBulkInsert/BinaryBulkMerge/BinaryBulkDelete/BinaryBulkDeleteByKeyBulkInsert/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:

  • RequiresDbTypeBeforeValueDbType assigned before Value (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 large IN (...) lists); defaults to 2098, lowered to 1500 for Firebird and Vertica.
  • MultiStatementSeparator — customizes the separator used by QueryMultiple/QueryMultipleAsync.
  • SqlTextParameterPrefix — parameter prefix used in raw/text SQL vs. bound DbParameters.
  • 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. UUID defaults 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 fields restriction instead.
  • JOIN queries — not supported at all, by design; use QueryMultiple/ExecuteQueryMultiple/SplitQuery and 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.Auto never resolves to Physical — a strict-equality bug means Auto always behaves like Memory regardless 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; the DataTable overloads of BulkInsert/BulkMerge rely on MERGE's OUTPUT ordering matching insertion order, which SQL Server's optimizer does not guarantee — can silently misassign identities on larger/parallel-plan batches.
  • ReturnIdentity is 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 SqlBulkCopy internals — including a private _rowsCopied field — is used as a row-count fallback; a future driver release renaming/removing it would silently degrade rather than fail loudly.

⚠️ Oracle

  • QueryMultiple costs N round trips (ODP.NET rejects multi-statement command text).
  • InsertAll/MergeAll execute one row per round trip today — true batching is planned for later.
  • Identity retrieval relies on an unverified DBMS_SQL.RETURN_RESULT PL/SQL-block pattern.
  • RETURNING on MERGE requires Oracle Database 23ai+.
  • No native GUID type — map as byte[] or register GuidToByteArrayPropertyHandler.
  • OracleBulkCopy is not transaction-aware — a rollback will not undo an already-copied plain BulkInsert. Request ReturnIdentity to force the transactional array-bind path.
  • Bulk staging: Memory (GTT) always resolves to Physical — no session isolation for concurrent callers.

⚠️ DB2

  • QueryMultiple costs N round trips; InsertAll/MergeAll are one-row-per-round-trip.
  • No native GUID type — map as byte[] or register Db2GuidToByteArrayPropertyHandler.
  • DB2BulkCopy load step does not honor the caller's transaction; the surrounding DDL and final statement do.
  • Bulk staging: Memory always resolves to Physical, 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.
  • BulkMerge with ReturnIdentity is 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 CS0433 compile error.
  • No native GUID type and no bundled property handler for one — map as string/byte[], or write your own.
  • RepoDb.MariaDb.BulkOperations's LOAD DATA LOCAL INFILE load step is not transaction-scoped.
  • Bulk staging: Memory always resolves to Physical in both packages; every call re-creates/drops the staging table (implicit commit on every call, since DDL auto-commits).
  • BulkMerge with ReturnIdentity is a 5-statement, non-atomic sequence relying on a session-variable identity pre-assignment seeded from a live MAX(identity)+1 read (deliberately not the cacheable information_schema value).

⚠️ ClickHouse

  • No real transactionsCommit()/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.
  • Merge emits a plain INSERT — correctness depends entirely on a deduplicating table engine (e.g. ReplacingMergeTree) and reading back with FINAL/argMax.
  • Update is an asynchronous mutation (ALTER TABLE ... UPDATE) — returns once queued, not once applied; poll system.mutations if you need to know when it lands.
  • Delete uses lightweight delete, inconsistently with Update'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 pass qualifiers explicitly for composite-keyed tables.
  • Bulk: no ReturnIdentity at all (hard NotSupportedException); Auto staging always resolves to Physical; even explicit Memory is not truly session-isolated (a plain named table, not CREATE TEMPORARY TABLE); reported row counts for BulkUpdate/BulkDelete/BulkMerge are staged counts, not confirmed-mutated counts.

⚠️ Firebird

  • Requires Firebird 3.0+ — identity detection relies on RDB$IDENTITY_TYPE, absent on 2.5 and earlier.
  • QueryMultiple costs N round trips; InsertAll/MergeAll are one-row-per-round-trip (batchSize > 1 throws).
  • IN (...) lists are hard-capped at 1500 members by the DSQL parser (MaxParameterCount = 1500); manual raw SQL must self-enforce this.
  • Merge/MergeAll fall back to an EXECUTE BLOCK PL/SQL construct when the identity column is itself a qualifier.
  • No session-wide scope identity, and no TRUNCATE TABLE statement (Truncate compiles to unconditional DELETE).
  • No native GUID type; only standard networked (SuperServer) Firebird is tested — not embedded or Classic/SuperClassic.

⚠️ Vertica

  • Merge/MergeAll compile a compound UPDATE ...; INSERT ... statement submitted as one string — unverified against a live instance, and its own remarks note VerticaCommand may refuse a parameterized compound statement outright.
  • MergeAll/UpdateAll are one-row-per-round-trip; InsertAll is the one exception (batchable).
  • useInvariantCulture: true on UseVertica() changes CultureInfo.CurrentCulture process-wide, not per-connection.
  • No table hints, no TRUNCATE TABLE, MaxParameterCount capped 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-row VALUES lists.
  • InsertAll/MergeAll/UpdateAll are one-row-per-round-trip (batchSize > 1 throws); no table hints.
  • No native GUID type — the handler for it (SapHanaGuidToStringPropertyHandler) ships in the Bulk package, not core.
  • Merge requires the primary key value already known on the entity — no generate-and-return-in-one-call path.
  • Bulk staging: Auto/Memory always resolve to Physical; 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 ReturnIdentity correlated-COUNT rank computation in BulkMerge is "the least-verified statement in the whole provider."

⚠️ EnterpriseDB

  • InsertAll does not append RETURNING (EDB rejects it against sub-table VALUES) — generated identities are only returned via Insert or 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 to object.
  • Targets EDB Postgres Advanced Server specifically, not community PostgreSQL.
  • Bulk: pseudo-table names are deterministic, not per-call-unique; prefer Memory over Physical for 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/-beta prerelease on nuget.org), e.g. RepoDb.Db2.
  • v1.16.0 — established packages already on the 1.x release train (currently at a 1.16.0-betaN prerelease 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.