Skip to content

Usage overview

This section shows where to go for each CaeriusNet task. Start here when you know what you want to do, but you are not sure which API or guide applies.

Typical workflow

Most CaeriusNet code follows the same pattern:

  1. Define or generate DTO and TVP types.
  2. Build stored procedure settings with StoredProcedureParametersBuilder.
  3. Call a read, write, multi-result, cache, or transaction API.
  4. Let CaeriusNet handle connection lifetime, command execution, telemetry, and exception wrapping.
csharp
[GenerateDto]
public sealed partial record UserDto(int Id, string Name, byte Age);

var sp = new StoredProcedureParametersBuilder("Users", "usp_Get_By_Age", 128)
    .AddParameter("Age", 18, SqlDbType.Int)
    .Build();

var users = await dbContext.QueryAsReadOnlyCollectionAsync<UserDto>(sp, ct);

Choose a guide

TaskStart with
Install the package and register servicesInstall and configure
Map stored procedure result rows to DTOsDTO mapping
Generate DTO or TVP mapper codeSource generators
Generate or verify stored procedure contractsAutoContracts
Read a result setReading data
Execute writes, deletes, updates, or scalar commandsWriting data
Send a list of values to SQL ServerTable-valued parameters
Read related result sets in one round tripMultiple result sets
Cache a read callCaching
Run several commands atomicallyTransactions
Connect to Aspire resourcesAspire integration
Capture traces, metrics, and logsLogging and observability
Review production recommendationsBest practices
Look up method signaturesAPI reference

Runtime API groups

Read APIs

Use read APIs when the stored procedure returns one or more rows.

MethodReturn shape
FirstQueryAsync<T>T?
QueryAsIEnumerableAsync<T>IEnumerable<T>
QueryAsReadOnlyCollectionAsync<T>ReadOnlyCollection<T>
QueryAsImmutableArrayAsync<T>ImmutableArray<T>

Write APIs

Use write APIs when the stored procedure changes data or returns a scalar value.

MethodReturn shape
ExecuteNonQueryAsyncRows affected
ExecuteScalarAsync<T>First column of the first row
ExecuteAsyncNo result

Multi-result APIs

Use multi-result APIs when one stored procedure returns related data sets.

Method familyReturn shape
QueryMultipleIEnumerableAsyncTuple of IEnumerable<T> values
QueryMultipleReadOnlyCollectionAsyncTuple of ReadOnlyCollection<T> values
QueryMultipleImmutableArrayAsyncTuple of ImmutableArray<T> values

Infrastructure APIs

Use infrastructure APIs when you need caching, transactions, or observability.

AreaAPI
CachingAddFrozenCache, AddInMemoryCache, AddRedisCache, ICaeriusNetCache
TransactionsBeginTransactionAsync, ICaeriusNetTransaction
TelemetryCaeriusDiagnostics, CaeriusTelemetryOptions
SetupCaeriusNetBuilder

Example repository

csharp
public sealed record UserRepository(ICaeriusNetDbContext DbContext)
{
    public async ValueTask<IEnumerable<UserDto>> GetUsersOlderThanAsync(
        byte age,
        CancellationToken ct)
    {
        var sp = new StoredProcedureParametersBuilder("dbo", "sp_GetUsers_By_Age", 450)
            .AddParameter("Age", age, SqlDbType.TinyInt)
            .Build();

        return await DbContext.QueryAsIEnumerableAsync<UserDto>(sp, ct);
    }

    public async ValueTask<int> UpdateUserAgeAsync(
        Guid guid,
        byte age,
        CancellationToken ct)
    {
        var sp = new StoredProcedureParametersBuilder("dbo", "sp_UpdateUserAge_By_Guid")
            .AddParameter("Guid", guid, SqlDbType.UniqueIdentifier)
            .AddParameter("Age", age, SqlDbType.TinyInt)
            .Build();

        return await DbContext.ExecuteNonQueryAsync(sp, ct);
    }
}

Documentation conventions

  • C# examples use ValueTask when they directly expose CaeriusNet hot-path calls.
  • SQL examples use SET NOCOUNT ON to prevent extra result sets.
  • Builder parameter names omit the SQL @ prefix.
  • DTO examples use [GenerateDto] unless a manual mapper is being explained.
  • TVP examples use [GenerateTvp] unless a manual mapper is being explained.

Released under the MIT License.