Zerra.Repository 6.0.0-rc.1

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

Zerra.Repository

LINQ data access for Zerra that doesn't depend on the data store. Handlers read and write data models through one IRepo interface, and each model type can live in a different store. It also supports event-sourced aggregates, and it is Native AOT compatible.

Installation

Install this package with the provider for your store:

dotnet add package Zerra.Repository
dotnet add package Zerra.Repository.MsSql
Package Store
Zerra.Repository.MsSql SQL Server
Zerra.Repository.PostgreSql PostgreSQL
Zerra.Repository.MySql MySQL
Zerra.Repository.MariaDb MariaDB
Zerra.Repository.Memory in memory, for tests and fallbacks
Zerra.Repository.KurrentDB KurrentDB event store, for aggregates

Data Models

[Entity("SalesOrder")]
public sealed class OrderDataModel
{
    [Identity(false)]                           // primary key, assigned by code
    public Guid ID { get; set; }

    [StoreProperties(true, 32)]                 // not null, max length 32
    public string? OrderNumber { get; set; }

    public Guid CustomerID { get; set; }

    [Relation(nameof(OrderLineDataModel.OrderID))]   // one-to-many: the related model's foreign key
    public OrderLineDataModel[]? Lines { get; set; }
}

Setup

A provider connects model types to an engine, and the repo holds the providers:

public sealed class OrdersStoreProvider<TModel> : TransactStoreProvider<TModel>
    where TModel : class, new()
{
    public OrdersStoreProvider(ITransactStoreEngine engine) : base(engine) { }

    protected override bool EventLinking => false;
    protected override bool QueryLinking => true;    // load relations named in a graph
    protected override bool PersistLinking => true;  // save related models with their parent
}

var engine = new MsSqlEngine(connectionString);
var repo = Repo.New();
repo.AddProvider(new OrdersStoreProvider<OrderDataModel>(engine));
repo.AddProvider(new OrdersStoreProvider<OrderLineDataModel>(engine));

var busServices = new BusServices();
busServices.AddRepo(repo);

Using IRepo in Handlers

public sealed class OrdersQueryHandler : BaseHandlerWithRepo, IOrdersQueryHandler
{
    public async Task<OrderModel[]> GetOrders(Guid customerID, CancellationToken cancellationToken)
    {
        var orders = await Repo.ManyAsync<OrderDataModel>(
            x => x.CustomerID == customerID,
            QueryOrder<OrderDataModel>.Create(x => x.OrderNumber),
            new Graph<OrderDataModel>(true, x => x.Lines));
        return orders.Select(ToModel).ToArray();
    }
}

Documentation

License

MIT - See LICENSE

Product Compatible and additional computed target framework versions.
.NET 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.
  • net10.0

NuGet packages (6)

Showing the top 5 NuGet packages that depend on Zerra.Repository:

Package Downloads
Zerra.Repository.MsSql

SQL Server provider for Zerra.Repository.

Zerra.Repository.PostgreSql

PostgreSQL provider for Zerra.Repository.

Zerra.Repository.MySql

MySQL provider for Zerra.Repository.

Zerra.Repository.KurrentDB

KurrentDB event store provider for Zerra.Repository.

Zerra.Repository.Memory

In-memory provider for Zerra.Repository, for tests and prototyping.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
6.0.0-rc.1 51 10/27/2026
5.4.2 137 10/11/2026
5.4.1 144 10/9/2026
5.2.0 897 12/3/2025
5.1.4 356 4/12/2025
5.1.1 445 4/9/2025
5.1.0 442 4/9/2025
5.0.0 437 1/3/2025
4.10.0 567 3/6/2024
4.9.0 652 1/22/2024
4.8.0 973 12/9/2023
4.7.6 912 10/4/2023
4.7.0 883 9/28/2023
4.6.0 954 9/20/2023
4.2.0 1,582 8/2/2023
4.1.6 1,178 8/2/2023
4.1.0 1,274 5/31/2023
4.0.0 1,580 5/25/2023
3.7.0 853 10/5/2022
Loading failed