Hydrix 2.0.0

Prefix Reserved
dotnet add package Hydrix --version 2.0.0
                    
NuGet\Install-Package Hydrix -Version 2.0.0
                    
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="Hydrix" Version="2.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Hydrix" Version="2.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Hydrix" />
                    
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 Hydrix --version 2.0.0
                    
#r "nuget: Hydrix, 2.0.0"
                    
#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 Hydrix@2.0.0
                    
#: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=Hydrix&version=2.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Hydrix&version=2.0.0
                    
Install as a Cake Tool

Hydrix

NuGet NuGet Downloads License Quality Gate Status

A high-performance, lightweight, provider-agnostic SQL materializer for .NET.

Hydrix is a micro-ORM built for developers who demand:

  • Full control over SQL execution
  • Explicit and predictable behavior
  • High performance without hidden abstractions
  • Efficient hierarchical entity materialization

It intentionally sits between raw ADO.NET and heavyweight ORMs such as Entity Framework, offering a Dapper-like experience enhanced with:

  • Nested entity materialization
  • Intelligent metadata caching
  • Optimized enum handling
  • Zero reflection in the hot path

🧭 Why Hydrix?

Hydrix is designed for performance-sensitive systems where:

    • SQL must remain explicit and visible
  • Developers retain full control over execution
  • Behavior must be predictable and transparent
  • Object graphs must be materialized efficiently from flat JOINs

Hydrix does not attempt to abstract SQL away from you.


⚠️ What Hydrix is not?

  • A LINQ provider
  • An automatic SQL generator
  • An entity tracking or state management framework

⚙️ Supported frameworks

  • .NET Core 3.1
  • .NET 6
  • .NET 8
  • .NET 10

✨ Key Features

  • Explicit SQL execution (Text and Stored Procedures)
  • Entity materialization via standard .NET DataAnnotations
  • Nested entity support (flat JOIN → object graph)
  • Thread-safe metadata caching
  • Zero reflection in the materialization hot path
  • Compiled enum converters (no Enum.ToObject per row)
  • Native SQL IN clause expansion
  • SQL command logging
  • Fully provider-agnostic (ADO.NET)
  • Zero external dependencies
  • Apache 2.0 licensed

⚡ Performance Design (Hydrix 2.0)

  • Hydrix 2.0 introduces architectural improvements focused on runtime efficiency:
  • Metadata is built once per type and cached
  • Property setters are compiled into delegates
  • Enum conversions use compiled converters
  • No reflection during row materialization
  • No Activator.CreateInstance in hot paths
  • No Enum.ToObject in hot paths
  • Minimal allocations during nested resolution

Hydrix is engineered for predictable runtime behavior and low GC pressure.


📦 Installation

dotnet add package Hydrix

🚀 Basic Usage

Executing SQL Commands

hydrix.ExecuteNonQuery(
    "INSERT INTO orders (id, total) VALUES (@id, @total)",
    new
    {
        id = Guid.NewGuid(),
        total = 150.75m
    }
);

Querying Entities

var orders = hydrix.Query<Order>(
    "SELECT id, total FROM orders WHERE total > @min",
    new { min = 100 }
);

Native IN Clause Support

var orders = hydrix.Query<Order>(
    "SELECT * FROM orders WHERE id IN (@ids)",
    new
    {
        ids = new[] { id1, id2, id3 }
    }
);

Hydrix automatically expands:

WHERE id IN (@ids_0, @ids_1, @ids_2)

Each value is safely parameterized.


🧱 Defining Entities

Simple Entity

using System.ComponentModel.DataAnnotations.Schema;

[Table("orders", Schema = "pos")]
public class Order :
    DatabaseEntity, ITable
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    [Column("id")]
    public Guid Id { get; set; }

    [Column("total")]
    public decimal Total { get; set; }
}

Nested Entities (Flat JOINs)

[Table("orders", Schema = "pos")]
public class Order :
    DatabaseEntity, ITable
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    [Column("id")]
    public Guid Id { get; set; }

    [ForeignKey("CustomerId")]
    [Column("customerId")]
    public Guid? CustomerId { get; set; }

    [ForeignTable("customer", Schema = "pos", PrimaryKeys = new[] { "Id" }, ForeignKeys = new[] { "CustomerId" })]
    public Customer Customer { get; set; }
}

Hydrix only materializes nested entities when related data is present, preventing empty object creation in LEFT JOIN scenarios.


Stored Procedures

[Procedure("sp_create_order", Schema = "pos")]
public class CreateOrder : 
    DatabaseEntity, IProcedure<SqlParameter>
{
    [Parameter("p_id", DbType.Guid)]
    public Guid Id { get; set; }

    [Parameter("p_total", DbType.Decimal)]
    public decimal Total { get; set; }
}

🔄 Transactions

hydrix.OpenConnection();
hydrix.BeginTransaction(IsolationLevel.ReadCommitted);

try
{
    await hydrix.ExecuteNonQueryAsync(...);
    await hydrix.ExecuteNonQueryAsync(...);

    hydrix.CommitTransaction();
}
catch
{
    hydrix.RollbackTransaction();
    throw;
}

📝 SQL Command Logging

Executing DbCommand
SELECT * FROM orders WHERE id IN (@ids_0, @ids_1)
Parameters:
  @ids_0 = 'a3f9...' (Guid)
  @ids_1 = 'b4c1...' (Guid)

🧩 Provider Compatibility

Hydrix works with any ADO.NET-compatible provider:

  • SQL Server
  • PostgreSQL
  • MySQL
  • Oracle
  • Others

🎯 Design Philosophy

Hydrix is built around the following principles:

  • Explicit SQL
  • Deterministic behavior
  • Performance first
  • No hidden abstractions
  • ADO.NET as a solid foundation

❤️ Supporting Hydrix

Hydrix is an open-source project built and maintained with care, transparency, and a long-term vision.

If Hydrix helps you build reliable, predictable, and high-performance data access layers, consider supporting the project. Your support helps ensure ongoing maintenance, improvements, documentation, and long-term sustainability.

You can support Hydrix through GitHub Sponsors:

👉 https://github.com/sponsors/marcelo-mattos

Every contribution, whether financial or by sharing feedback and usage experiences, is deeply appreciated.


📄 License

This project is licensed under the Apache License 2.0. See the LICENSE and NOTICE files for details.


👨‍💻 Author

Marcelo Matos dos Santos
Software Engineer • Open Source Maintainer.
Engineering clarity. Delivering transformation.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  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 was computed.  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. 
.NET Core netcoreapp3.1 is compatible. 
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
2.0.0 34 2/28/2026
1.1.1 141 1/3/2026
1.1.0 103 1/2/2026
1.0.0 273 12/18/2025

- (2.0.0) Modernize attribute and metadata mapping system

     - Replaced legacy Hydrix SQL attributes with .NET DataAnnotations
     ([Table], [Column]) and introduced new Hydrix-specific attributes
     ([ForeignTable], [Procedure], [Parameter]).

     - Implemented a new mapping and metadata infrastructure including
     ITable, IProcedure<T>, ColumnMap, TableMap, TableMetadata, and
     supporting factories and utilities. Removed obsolete attribute
     classes, interfaces, and legacy mapping code.

     - Updated materializers, metadata resolution, and unit tests to align
     with the new attribute model. Added comprehensive test coverage for
     the new mapping system, standardized naming, and improved internal
     documentation.

     BREAKING CHANGE: consumers must migrate entities, procedures, and
     parameters to the new DataAnnotations-based attribute model.