Majal.DataTransferObjects
1.0.0-alpha.43
dotnet add package Majal.DataTransferObjects --version 1.0.0-alpha.43
NuGet\Install-Package Majal.DataTransferObjects -Version 1.0.0-alpha.43
<PackageReference Include="Majal.DataTransferObjects" Version="1.0.0-alpha.43" />
<PackageVersion Include="Majal.DataTransferObjects" Version="1.0.0-alpha.43" />
<PackageReference Include="Majal.DataTransferObjects" />
paket add Majal.DataTransferObjects --version 1.0.0-alpha.43
#r "nuget: Majal.DataTransferObjects, 1.0.0-alpha.43"
#:package Majal.DataTransferObjects@1.0.0-alpha.43
#addin nuget:?package=Majal.DataTransferObjects&version=1.0.0-alpha.43&prerelease
#tool nuget:?package=Majal.DataTransferObjects&version=1.0.0-alpha.43&prerelease
<div align="center"> <img src="assets/logo.svg" alt="Majal Logo" width="200" /> </div>
<div align="center" style="margin-top: 20px;">
</div>
Overview
Majal is a C# source generator library that helps you implement Domain-Driven Design (DDD) patterns with minimal boilerplate. It provides source generators for:
- Entities (with equality and comparison helpers)
- Aggregates (domain events publishing)
- Value Objects (with equality and comparison helpers)
- Archivables (Soft-deletion)
- Auditables (Creation/Update tracking)
- Translatables (Multi-language support)
- Ordinals (Sort order)
- DTOs (generated from a type's factory method, with reverse conversion back to the domain type)
The library ships as a set of Roslyn analyzer/source generator packages that can be referenced from any .NET project.
NuGet Packages
The core generators live in Majal. EF Core integration and DTO generation are separate, opt-in packages so you only take the dependencies you need:
<PackageReference Include="Majal" Version="<VERSION>" />
<PackageReference Include="Majal.EntityFrameworkCore" Version="<VERSION>" />
<PackageReference Include="Majal.DataTransferObjects" Version="<VERSION>" />
Each package contains its generators and the required analyzer DLLs.
Building the Project
The solution targets .NET Standard 2.0 and can be built with the .NET CLI:
# Restore packages
dotnet restore
# Build the generators
dotnet build src/Majal/Majal.csproj -c Release
The generated analyzer DLL will be placed in src/Majal/bin/Debug/netstandard2.0/ (or Release folder).
To build the samples against locally generated packages, run this from the repository root:
./scripts/build.ps1
The script writes the packages to .artifacts, restores the sample from that local feed, and builds it in Release configuration.
Running Tests
The repository contains four test projects: Majal.Tests (generator/analyzer unit tests), Majal.FunctionalTests (compiled runtime behavior), Majal.DataTransferObjects.Tests (DTO generator unit tests), and Majal.EntityFrameworkCore.Tests (EF Core interceptor/convention/value-converter integration tests against a real SQLite database). Run them all with:
dotnet test Majal.slnx
Samples
samples/EShop-- an ASP.NET Core + Wolverine.Http API exercising every Majal generator feature (entities, aggregates, value objects, translatables, archivables, auditables, ordinals, and[DtoFor<T>]including polymorphic and flattened DTOs) over EF Core/SQLite.samples/EShop.Web-- a Nuxt UI front end for the EShop API, calling it through nuxt-api-party's server-side proxy.
Run the API first (dotnet run --project samples/EShop), then the web app
(bun install && bun run dev from samples/EShop.Web).
EF Core Integration
Majal's EF Core package centralizes the registration of value-object conventions, translatable filters, archivable filters, and save-change interceptors through MajalDbContext<TLocale>.
public sealed class AppDbContext(
DbContextOptions<AppDbContext> options,
ILocaleProvider<CultureInfo> localeProvider)
: MajalDbContext<CultureInfo>(options, localeProvider.GetCurrentLocale())
{
public DbSet<Product> Products => Set<Product>();
protected override void ConfigureConventions(ModelConfigurationBuilder builder)
{
base.ConfigureConventions(builder);
builder.Properties<CultureInfo>().HaveConversion<CultureInfoValueConverter>();
}
}
This keeps the context setup consistent and removes the need to manually register the generated conventions and interceptors in each DbContext.
Documentation
- Getting Started
- Aggregates Guide
- Entities Guide
- Value Objects Guide
- Archivables Guide
- Auditables Guide
- Translatables Guide
- Ordinals Guide
- DTOs Guide
- EF Core Integration
Contributing
Contributions are welcome! Feel free to open issues or submit pull requests.
License
This project is licensed under the MIT License.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. 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 was computed. 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 was computed. 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 | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- System.Text.Json (>= 10.0.11)
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-alpha.43 | 65 | 8/25/2026 |
| 1.0.0-alpha.42 | 57 | 8/19/2026 |
| 1.0.0-alpha.41 | 65 | 8/18/2026 |
| 1.0.0-alpha.40 | 61 | 8/18/2026 |
| 1.0.0-alpha.39 | 70 | 8/12/2026 |