Dapper

Use Dapper for queries. Use DbExtensions when the next step is writing many rows.

using var connection = new SqlConnection(connectionString);

var customers = connection
    .Query<Customer>("SELECT * FROM Customer WHERE Active = 1")
    .ToList();

connection.BulkUpdate(customers);

A foreach + Execute is fine for a handful of rows. At thousands of rows it is the slow path we measured: one round-trip each. DbExtensions keeps your POCOs and the same connection.

SqlBulkCopy

On SQL Server, BulkInsert uses SqlBulkCopy. If you only ever insert into SQL Server and you already maintain DataTable + column mappings, SqlBulkCopy stays a valid choice — and in our benchmark it was a few milliseconds faster than BulkInsert because there is no object mapping.

Reach for DbExtensions when you also need:

  • Update, delete, or merge (SqlBulkCopy is insert-only)
  • POCOs instead of DataTable
  • PostgreSQL, MySQL, Oracle, Db2, SQLite, … with the same method names

Dapper Plus

Dapper Plus is a commercial bulk library aimed at Dapper users. The problem it solves is the same: Dapper has no bulk writes.

DbExtensions is the ETLBox answer to that gap:

Dapper PlusETLBox.DbExtensions
HostExtension methods on the connectionExtension methods on IDbConnection
OperationsBulk insert / update / delete / mergeBulk insert / update / delete / merge
EngineDapper PlusETLBox bulk connectors
DatabasesMultiple ADO.NET providersETLBox providers (SQL Server, Postgres, MySQL, Oracle, Db2, SQLite, Snowflake, HANA, …)
Fits ifYou want that vendor’s APIYou already use ETLBox, or want the same bulk engine as EFBox / ETLBox data flows

We do not publish a head-to-head speed contest against Dapper Plus. Different machines and scripts are not comparable. Run both against your tables if that decision matters.