Zerra.Repository
6.0.0-rc.1
dotnet add package Zerra.Repository --version 6.0.0-rc.1
NuGet\Install-Package Zerra.Repository -Version 6.0.0-rc.1
<PackageReference Include="Zerra.Repository" Version="6.0.0-rc.1" />
<PackageVersion Include="Zerra.Repository" Version="6.0.0-rc.1" />
<PackageReference Include="Zerra.Repository" />
paket add Zerra.Repository --version 6.0.0-rc.1
#r "nuget: Zerra.Repository, 6.0.0-rc.1"
#:package Zerra.Repository@6.0.0-rc.1
#addin nuget:?package=Zerra.Repository&version=6.0.0-rc.1&prerelease
#tool nuget:?package=Zerra.Repository&version=6.0.0-rc.1&prerelease
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
- Repository - Models, providers, queries, relations, and aggregates
- Repository Generation - Code First schema generation
- Graph - Selecting relations and columns
- Zerra documentation
License
MIT - See LICENSE
| Product | Versions 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. |
-
net10.0
- Zerra (>= 6.0.0-rc.1)
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 |