Ignyte.Inquiry.Testing 1.0.0-preview.10

This is a prerelease version of Ignyte.Inquiry.Testing.
dotnet add package Ignyte.Inquiry.Testing --version 1.0.0-preview.10
                    
NuGet\Install-Package Ignyte.Inquiry.Testing -Version 1.0.0-preview.10
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Ignyte.Inquiry.Testing" Version="1.0.0-preview.10" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Ignyte.Inquiry.Testing" Version="1.0.0-preview.10" />
                    
Directory.Packages.props
<PackageReference Include="Ignyte.Inquiry.Testing" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Ignyte.Inquiry.Testing --version 1.0.0-preview.10
                    
#r "nuget: Ignyte.Inquiry.Testing, 1.0.0-preview.10"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Ignyte.Inquiry.Testing@1.0.0-preview.10
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Ignyte.Inquiry.Testing&version=1.0.0-preview.10&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Ignyte.Inquiry.Testing&version=1.0.0-preview.10&prerelease
                    
Install as a Cake Tool

Inquiry

NuGet NuGet downloads CI Docs License: MIT

Inquiry is an experimental .NET 8+ source-generated micro-ORM. You write attributed entity classes and partial store classes with partial method declarations; a Roslyn source generator emits the matching partial with method bodies, materializers, and dependency-injection wiring. Every SQL string is built at compile time by a provider-specific SqlBuilder and baked into the generated source as const string fields, so each database can be tuned independently and the runtime carries no SQL.

Documentation lives in the DocFX site (docs/site/) — getting-started, features, per-dialect notes, the architecture deep-dive, security, and an auto-generated API reference, plus a Develop area with project status and the roadmap. The published site lives at https://ignytesoftware.github.io/inquiry/ (deployed by docs.yml on every push to main); preview locally with docfx docs/site/docfx.json --serve (see docs/site/README.md).

Repository layout

Project Purpose
src/Inquiry Public runtime: IInquiry facade, attributes, command/parameter types, transactions, options, and the DI extension AddInquiry(). Ships no SQL; the request pipeline is internal.
src/Inquiry.Generators.Shared Roslyn incremental source-generator framework. Discovers entities and stores; emits materializers, generated stores, the DI registration class, and InquiryGeneratedSchema.Ddl. Owns the per-dialect SqlBuilder hierarchy. Bundled privately into each provider analyzer.
src/Inquiry.{Sqlite,SqlServer,PostgreSql,MySql,MariaDb,Oracle}.Analyzer Per-dialect Roslyn analyzers — each a [Generator] that bundles the shared framework and emits only when its dialect matches the resolved [InquiryDialect].
src/Inquiry.{Sqlite,SqlServer,PostgreSql,MySql,MariaDb,Oracle} Per-dialect runtime providers: AddInquiry<Dialect>(...) DI extension, provider options, internal connection factory, and the [assembly: InquiryDialect("...")] marker.
src/Inquiry.AspNetCore ASP.NET Core audit-context middleware that stamps CreatedBy/ModifiedBy from the current user identity.
src/Inquiry.Aspire Aspire resource-name registration with automatic Inquiry telemetry and health checks.
src/Inquiry.Interceptors Opt-in companion: slow-query warning logging, sqlcommenter trace-context tagging, and N+1 query detection.
src/Inquiry.Testing Test helpers: SQLite fixture, recording command interceptor, entity factory, transaction sandbox, and Respawn reset wrapper.
tests/… Core runtime tests, source-generator tests, the shared Inquiry.IntegrationTesting and Inquiry.FeatureCatalog support libraries, and per-dialect end-to-end suites (SQLite in-process; the rest via Testcontainers).
samples/Inquiry.Northwind Shared classic-Northwind entities, stores, and per-provider DDL consumed by the samples and integration tests.
samples/Inquiry.Sample Runnable ASP.NET Core sample exercising CRUD, upsert, transactions, and eager loading on SQLite.
samples/Inquiry.AotSmoke NativeAOT verification app — published and executed by the aot-smoke CI job.

Quickstart

using Inquiry;
using Inquiry.Entities;
using Inquiry.Stores;

[InquiryTable("TOrganization")]
public sealed class Organization
{
    [InquiryKey] public Guid Key { get; set; } = Guid.NewGuid();
    [InquiryColumn("Name")] public string Name { get; set; } = string.Empty;
    [InquiryColumn] public bool IsActive { get; set; } = true;
}

public partial class OrganizationStore : InquiryStore<Organization>
{
    [InquirySelectAll]
    public partial IAsyncEnumerable<Organization> SelectAllAsync(CancellationToken ct = default);

    [InquirySelectOneByKey]
    public partial Task<Organization?> SelectByKeyAsync(Guid key, CancellationToken ct = default);

    [InquiryInsert]
    public partial Task<int> InsertAsync(Organization o, CancellationToken ct = default);
}

Register Inquiry with a provider and resolve the store:

using Inquiry.DependencyInjection;
using Inquiry.Sqlite.DependencyInjection;

services.AddInquiry();                 // core runtime services
services.AddInquiryGeneratedStores();  // stores generated in this assembly
services.AddInquirySqlite(connectionString);

var orgs = sp.GetRequiredService<OrganizationStore>();
await foreach (var o in orgs.SelectAllAsync()) { /* ... */ }

The method bodies, the SQL const strings, the materializers, and the DI wiring are all generated at build time. Beyond this core CRUD surface, Inquiry supports richer WHERE predicates, ORDER BY + offset/keyset pagination, batch & bulk operations, projections + aggregations, eager loading (incl. many-to-many through a junction), optimistic concurrency, soft deletes, global query filters, full-text search, JSON/value-converter columns, JSON-path predicate querying, CREATE TABLE schema-DDL generation, opt-in observability (OpenTelemetry tracing + metrics and ILogger logging via AddInquiryTelemetry()), and open-time resiliency (cloud transient retry + backup-server failover). See How it works and the Architecture deep-dive for the full compile-time pipeline, SQL-building, and runtime walkthrough.

Running the sample

dotnet run --project samples\Inquiry.Sample\Inquiry.Sample.csproj

The sample seeds a database (SQLite by default; configurable to SQL Server or PostgreSQL via Inquiry:Provider), serves a Blazor Server dashboard at /, and exercises CRUD, upsert, eager loading, and a transactional insert.

Running the tests

dotnet test

Tests cover parameter binding, the request pipeline, transactions, generator emission, per-dialect SQL strings, end-to-end CRUD/eager-loading against in-memory SQLite, and — for every provider — live CRUD, schema-fidelity, and generated-DDL verification against the real engine.

The SQL Server, PostgreSQL, MySQL, MariaDB, and Oracle integration suites provision their engine with Testcontainers — the only host dependency is Docker. When Docker is unavailable every live fact skips (via SkippableFact) rather than failing, so dotnet test stays green without Docker. Required CI runs all five server providers with Docker required on pull requests into main. See Project status for the current state and the Roadmap for what's next.

Installing

Packages ship on nuget.org under the Ignyte. prefix (assemblies and namespaces remain Inquiry.*). Install the provider you need — it pulls in the core Ignyte.Inquiry package:

dotnet add package Ignyte.Inquiry.Sqlite      # or .SqlServer / .PostgreSql / .MySql / .MariaDb / .Oracle
dotnet add package Ignyte.Inquiry.Aspire      # optional Aspire client integration
dotnet add package Ignyte.Inquiry.Testing     # optional test helpers

Contributing and releasing

See CONTRIBUTING.md for the full workflow. In short: feature branches PR into main (trunk-based); releases are tag-driven — a maintainer pushes vX.Y.Z for a stable or vX.Y.Z-preview.N for a preview, and release.yml packs, verifies, and publishes to nuget.org. The tag must match the version in eng/release-manifest.json, so every release starts with a reviewed manifest-bump PR. See Contributing — Releasing for the package verifier details.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0-preview.10 57 9/4/2026
1.0.0-preview.9 59 8/29/2026
1.0.0-preview.8 64 8/18/2026
1.0.0-preview.7 73 8/3/2026
1.0.0-preview.6 61 8/3/2026
1.0.0-preview.5 68 8/2/2026
1.0.0-preview.4 63 8/2/2026
1.0.0-preview.3 69 8/2/2026