Skip to main content

Curiosus.DAL

NuGet Downloads Coverage

Data access abstractions shared by the Curiosus DAL packages: read-only and read-write data contexts, context factories, transactions with completion events, a raw SQL executor contract and DbOptions. Depend on it from application code; pick an implementation such as Curiosus.DAL.EF or Curiosus.DAL.Dapper.

Installation​

dotnet add package Curiosus.DAL

Usage​

Main types:

  • ICuriosusReadOnlyDataContext / ICuriosusDataContext — Connection, CommandTimeoutSec, SaveChangesAsync, BeginTransactionAsync, OnTransactionCompleted / OnTransactionCompletedAsync events;
  • ICuriosusDataContextFactory / ICuriosusReadOnlyDataContextFactory (and typed <TContext> variants) — you implement them for your context;
  • ICuriosusDataContextTransaction — commit/rollback, raises completion events after a successful commit;
  • ISqlExecutor — raw SQL and stored procedure calls over a data context;
  • TransactionHelper.SafeRollbackTransactionsAsync — rolls back several transactions, logging failures instead of throwing;
  • DbOptions — ConnectionString (required), ReadOnlyConnectionString, IsGlobalLoggingEnabled, IsSensitiveDataLoggingEnabled.
using Curiosus.DAL;

public class OrderService(ICuriosusDataContextFactory contextFactory, ILogger<OrderService> logger)
{
public async Task CompleteAsync(CancellationToken ct)
{
using var context = contextFactory.CreateContext();
await using var transaction = await context.BeginTransactionAsync(cancellationToken: ct);
try
{
// ... change data ...
await context.SaveChangesAsync(ct);
transaction.OnTransactionCompletedAsync += _ => Task.CompletedTask; // e.g. publish events
await transaction.CommitAsync(ct);
}
catch
{
await TransactionHelper.SafeRollbackTransactionsAsync(logger, ct, transaction);
throw;
}
}
}

DbOptions implements IValidatableOptions, so it can be checked with options.AssertValid() from Curiosus.Configuration.

See also​