API Reference
Complete API documentation for Jaunty micro-ORM.
Method Categories
Query Methods (Read)
| Category | Methods | Documentation |
|---|---|---|
| Strict Mapping | Query<T>, QueryFirst<T>, QueryFirstOrDefault<T>, QuerySingle<T>, QuerySingleOrDefault<T> |
query-methods.md |
| Partial Mapping | QueryPartial<T>, QueryPartialFirst<T>, QueryPartialFirstOrDefault<T>, QueryPartialSingle<T>, QueryPartialSingleOrDefault<T> |
query-partial-methods.md |
| Scalar Values | QueryScalar<T>, ExecuteScalar<T> |
scalar-methods.md |
| Streaming | QueryStream<T>, QueryPartialStream<T>, QueryPartialUnbuffered<T> |
streaming-methods.md |
Write Methods
| Category | Methods | Documentation |
|---|---|---|
| Individual | Insert<T>, Update<T>, Delete<T> |
write-methods.md |
| Bulk | BulkInsert<T>, BulkUpdate<T>, BulkDelete<T> |
write-methods.md |
| Bulk Copy | Native bulk copy (auto-activated for 100+ rows) | bulk-copy-methods.md |
| Upsert | Upsert<T> |
write-methods.md |
Advanced
| Category | Methods | Documentation |
|---|---|---|
| Multiple Result Sets | QueryMultiple, GridReader.Read* |
multiple-result-sets.md |
| Stored Procedures | ExecuteStoredProcedure* |
stored-procedures.md |
| Special Types | Query<Dictionary>, Query<ExpandoObject>, Query<KeyValuePair>, Query<ValueTuple> |
special-types.md |
Configuration
| Component | Purpose | Documentation |
|---|---|---|
| Attributes | [Table], [Column], [Ignore], [Key], [DatabaseGenerated] |
attributes.md |
| Schemas | What a schema means per engine, and when Jaunty emits one | schemas.md |
| JauntyConfig | Global configuration, naming conventions | configuration.md |
| CommandOptions | Transaction, timeout, custom mapper | command-options.md |
Fluent API (Optional)
| Component | Purpose | Documentation |
|---|---|---|
| Fluent Select | Query.Build().Select().From() |
fluent-api.md |
| Fluent Where | .Where(), .WhereIn(), .WhereBetween() |
fluent-api.md |
| Fluent Join | .Join(), .LeftJoin() |
fluent-api.md |
| Fluent Group | .GroupBy(), .OrderBy(), .Take(), .Skip() |
fluent-api.md |
Quick Reference
Basic Query
C#
// Strict mapping
var products = connection.Query<Product>(
"SELECT * FROM products WHERE category_id = @CategoryId",
new { CategoryId = 1 });
// Partial mapping
var summaries = connection.QueryPartial<ProductSummary>(
"SELECT id, name FROM products");
// Scalar
var count = connection.QueryScalar<long>("SELECT COUNT(*) FROM products");
Async
C#
var products = await connection.QueryAsync<Product>(sql, cancellationToken);
var count = await connection.QueryScalarAsync<long>(sql, cancellationToken);
With Options
C#
// Transaction
using var tx = connection.BeginTransaction();
var products = connection.Query<Product>(sql,
CommandOptions<Product>.WithTransaction(tx));
// Timeout
var products = connection.Query<Product>(sql,
CommandOptions<Product>.WithTimeout(30));
// Custom mapper
var products = connection.Query<Product>(sql,
CommandOptions<Product>.WithMapper(MapProduct));
CRUD
C#
// Insert (returns identity)
long id = connection.Insert(product);
// Update (returns rows affected)
int rows = connection.Update(product);
// Delete by entity
int rows = connection.Delete(product);
// Delete by ID
int rows = connection.Delete<Product>(id);
Note: Upsert/UpsertAsync return provider-specific "rows affected" values; for MariaDB/MySQL, updates may report 2 instead of 1. Prefer checking result > 0 for cross-provider behavior.
Multiple Result Sets
C#
const string sql = @"
SELECT * FROM products WHERE category_id = @CategoryId;
SELECT * FROM categories WHERE category_id = @CategoryId;
";
using var multi = connection.QueryMultiple(sql, new { CategoryId = 1 });
var products = multi.Read<Product>();
var category = multi.ReadFirst<Category>();
Mapping Modes
| Mode | Method | Behavior |
|---|---|---|
| Strict | Query<T>() |
Throws on an unmatched property; the reflection mapper also throws on an unmatched column, the source-generated one ignores it (detail) |
| Partial | QueryPartial<T>() |
Only maps existing columns, ignores unmatched properties |
Parameter Binding
C#
// Named parameters
connection.Query<Product>(sql, new { CategoryId = 1, MinPrice = 100 });
// A single scalar, when the SQL names exactly one parameter
connection.Query<Product>("SELECT * FROM products WHERE category_id = @CategoryId", 1);
// Collection expansion
connection.Query<Product>(
"SELECT * FROM products WHERE category_id IN @CategoryIds",
new { CategoryIds = new[] { 1, 2, 3 } });
Error Handling
| Error | Exception |
|---|---|
| Property with no column, or column with no property - strict mode, reflection mapper | InvalidOperationException |
| Property with no column - strict mode, source-generated mapper | provider-specific, from GetOrdinal: ArgumentOutOfRangeException (SQLite), IndexOutOfRangeException (SqlClient) |
| Parameter count mismatch | ArgumentException |
| No elements (First/Single) | InvalidOperationException |
| Multiple elements (Single) | InvalidOperationException |
| NULL to non-nullable value type | InvalidOperationException |
See Also
../../00-quick-start/README.md- Quick start../../02-architecture/README.md- Architecture