jaunty Api reference › API Reference

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