Notes on building
fast, honest data access.
Engineering write-ups, release notes, and tutorials from the team behindRepoDB — a production-ready data access platform for .NET applications.
Pick your database
12 databases, one consistent API
ClickHouse
An open-source, column-oriented database built for real-time analytics at scale.
DB2
IBM's enterprise-grade relational database for mission-critical workloads.
EnterpriseDB
A PostgreSQL-based platform with added enterprise features and support.
Firebird
A lightweight, open-source relational database with strong SQL standard compliance.
MariaDB
A community-driven, open-source fork of MySQL with enhanced performance features.
MySQL
One of the world's most popular open-source relational databases.
Oracle
A powerful, enterprise-grade relational database used across large organizations.
PostgreSQL
An advanced open-source object-relational database known for reliability and extensibility.
SAP HANA
An in-memory, column-oriented database platform built for real-time analytics.
SQL Server
Microsoft's relational database management system for enterprise applications.
SQLite
A self-contained, serverless database engine embedded directly in applications.
Vertica
A columnar analytics database built for large-scale data warehousing.
As an end-to-end
data platform.
RepoDB is more than a query runner — it connects to any database, powers a smarter ORM, moves data at scale, and reports on itself, all through one consistent API.
Everything you need,
built in.
From batch and bulk operations to caching, tracing, and type mapping — the capabilities that make RepoDB a complete data access layer, not just a query runner.
Features
19 core features of the library
Batch Operations
Packing thousands of single-row statements into a handful of round trips, without changing a single call site.
Bulk Operations
Set-based inserts, updates, deletes, and merges that bypass row-by-row round trips entirely.
Caching
A key/value layer in front of your read operations that skips the round trip entirely once something is already in memory.
Class Handlers
Intercepts the moment a whole entity is read from or written to the database, for validation or side effects at the model level.
Class Mapping
Attribute-based control over how a class and its properties line up with tables, columns, keys, and handlers.
Connection Persistency
Controls whether a repository opens a fresh connection per call or holds one open for its entire lifetime.
Dynamics
CRUD against a literal table name and anonymous objects, for the calls that don't warrant a full entity model.
Enumeration
Enum properties round-trip as strings by default, with an escape hatch to force numeric storage or fully custom handling.
Expression Trees
Four different ways to express a filter, from a plain anonymous object to fully composable query trees.
Hints
Table hints like NOLOCK or TABLOCK, passed straight through to SQL Server without dropping into raw SQL.
Implicit Mapping
Attribute-free mapping for class names, columns, keys, and types, configured entirely through mapper classes.
Multiple Query
Fetch a parent and its related rows in a single round trip instead of one query per relationship.
Property Handlers
Custom, per-property conversion logic for the cases where the default type mapping isn't enough.
Repositories
A dedicated class between your application and the database, so every data access call funnels through one place.
Targeted Operations
Naming exactly which columns an operation should touch, without a change tracker doing the diffing behind your back.
Telemetry
Opt-in, drop-in telemetry that captures every operation and publishes it to a collector and Grafana dashboard — no custom trace class required.
Tracing
Hooks before and after every execution for logging, auditing, or cancelling a command outright.
Transaction
Ordinary ADO.NET transactions, shared across as many repository or connection calls as you need.
Type Mapping
Maps a .NET CLR type, or a single property, to its exact equivalent database type.