RepoDB v1.17.0 — DuckDB, CockroachDB, AuroraDB, a New SQLite Family, and NativeAOT

We are excited to announce RepoDB v1.17.0. Just six weeks after v1.16.0, this release adds five new database providers, makes RepoDB NativeAOT- and trim-compatible, and brings stricter, safer Bulk Operations.

🌐 New database providers

Provider Bulk Announcement
DuckDB ✅ Preview Support for DuckDB
CockroachDB ✅ Preview Support for CockroachDB
AuroraDB (PostgreSQL) ✅ Preview Support for Amazon Aurora
AuroraDB (MySQL) ✅ Preview Support for Amazon Aurora
SQLite (Turso) and SQLite (Ahtola) — Turso and Ahtola Join RepoDB’s SQLite Family

RepoDb.Sqlite.Microsoft, RepoDb.Sqlite.Turso and RepoDb.Sqlite.Ahtola now share one structure as RepoDB’s SQLite family.

✨ What’s new

ExecuteQueryFirst and ExecuteQuerySingle. Both are available, with async versions, on the connection and on the repositories. First returns the first row. Single also fails if more than one row comes back. Both throw an EmptyException when no row is found.

using var connection = new SqlConnection(connectionString);
var person = connection.ExecuteQueryFirst<Person>("SELECT * FROM [Person] WHERE [Age] >= @Age ORDER BY [Id];",
    new { Age = 18 });

NativeAOT and trimming. The Core, every provider and every Bulk package are now NativeAOT- and trim-compatible on .NET 8 and later. This was contributed by Marc-André Moreau.

Strict Bulk column mappings. The new BulkColumnMappingsBehavior setting (Automatic, Strict or StrictBypass) is available in every Bulk package. With a strict setting, unmapped or invalid columns fail fast instead of quietly loading into the wrong columns.

More additions:

  • ReplaceQueryField lets a query use SQL’s REPLACE function on a field. It was contributed by Paolo Bassi.
  • Property handlers are now available for every provider.
  • identityBehavior is now available on the DB2, MySQL, MySqlConnector and Oracle Bulk packages.
  • IDbSetting gained Provider, IsSchemaSupported and AreIndexNamesUniquePerSchema.

🐞 Notable fixes

  • SQL Server temporary tables (# and ##) are now detected correctly (#1196).
  • BulkUpdateAsync no longer fails intermittently when the key is an identity (#1351).
  • MySQL Update now works with composite keys.
  • Schema.Table names are now quoted correctly.

⚠️ Upgrade notes

  1. Custom IDbSetting implementations must implement Provider. Deriving from BaseDbSetting gives you this automatically.
  2. Null arguments now throw ArgumentNullException instead of NullReferenceException. Update any code that catches the old exception.
  3. Strict Bulk mappings can surface mapping mistakes that were previously ignored. Review BulkColumnMappingsBehavior on your Bulk calls.
  4. The EnterpriseDB, MariaDB, MariaDbConnector and CockroachDB property handlers were renamed to carry their provider prefix. Update any references to the old names.
  5. The SQLite packages were restructured. Check your package names if you use Turso, Ahtola or the Microsoft SQLite provider.

See the full release notes for every change.

🙏 Thank you

Thank you to everyone who contributed to this release: Marc-André Moreau (@mamoreau-devolutions), Paolo Bassi (@bpaolo71), Nabil Gardon (@ngardon) and @Benziza. Thanks also to @daaleonardo and @cajuncoding for their bug reports, and to everyone who filed issues and joined the discussions.


~ Conceptualized by me. Reviewed and checked by AI. Refined and gatekept by me. ~

Please support us

Give a ⭐ to our GitHub repository | Follow me on X / Twitter | Connect with us on our official Teams Channel
Apache License 2.0 — Copyright © 2026 by Michael Camara Pendon / Create a Request