Michael's still building — free, for .NET.

Notes on building
fast, honest data access.

Engineering write-ups, release notes, and tutorials from the team behind
RepoDB — a production-ready data access platform for .NET applications.

Pick your database

12 databases, one consistent API
One platform, every layer of your data access.

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.

RepoDB connectors: data sources including databases, ODBC, and files flow through .NET compliant ADO.NET providers and wired-protocol connectors to power the ORM and Data Productivity Platform

More databases, no boundaries

RepoDB connects through native, wired-protocol, and ODBC providers — one ADO.NET compliant connection powers the whole ORM and Data Productivity Platform.

RepoDB ORM: a code sample querying users with connection.QueryAsync, alongside CRUD, batch, bulk, and multi-database support for SQL Server, PostgreSQL, MySQL, and Oracle

A smarter ORM for real applications

Simple, flexible data access for .NET — CRUD, batch, and bulk operations built for performance, on any database.

RepoDB Data Productivity Platform: a code sample copying data between connections, alongside move, copy, calculate, and migrate operations across SQL Server, PostgreSQL, MySQL, and Oracle

A data productivity platform

Move, copy, calculate, and migrate data across databases at scale — using the same API you already know.

RepoDB default telemetry: live dashboard showing operations per second, average latency, and apps tracked, flowing from your app through a collector into PostgreSQL and Grafana

Default telemetry, out of the box

Every RepoDB app ships with a built-in collector for ops/sec, latency, and query volume — stored in PostgreSQL, visualized live in Grafana, zero setup.

19 features, zero bolt-ons.

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.