This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
The project uses NUKE for build automation. The primary build commands are:
./build.cmdor./build.sh- Main build script (automatically installs required .NET SDK)./build.cmd Compile- Compile the solution./build.cmd Test- Run all tests./build.cmd Pack- Create NuGet packages (runs tests first)./build.cmd Clean- Clean build artifacts./build.cmd Restore- Restore NuGet packages and tools
Standard .NET CLI commands work within the src/ directory:
dotnet build src/datajam.sln- Build the solutiondotnet test src/datajam.sln- Run all testsdotnet test src/tests/DataJam.Testing.UnitTests/- Run specific test project
DataJam is a .NET library providing abstraction patterns for data access across different ORM technologies. The architecture follows domain-driven design principles with clear separation of concerns.
Domain-Driven Architecture: The library is organized around domains that encapsulate related entities and their data access configuration. Each domain provides:
- Entity mappings and configuration
- Data context abstractions
- Command/query pattern implementations
Multi-ORM Support: The project supports multiple data access technologies:
- Entity Framework Core (
DataJam.EntityFrameworkCore) - Entity Framework 6 (
DataJam.EntityFramework) - Core abstractions (
DataJam) - Testing utilities (
DataJam.Testing)
Command/Query Pattern: Uses command objects that implement ICommand interface for operations that don't return values, with execution through IUnitOfWork.
src/
├── code/ # Core library projects
│ ├── DataJam/ # Core abstractions and patterns
│ ├── DataJam.EntityFrameworkCore/# EF Core implementations
│ ├── DataJam.EntityFramework/ # EF6 implementations
│ └── DataJam.Testing/ # Testing utilities
├── test-support/ # Test infrastructure libraries
└── tests/ # Test projects (unit and integration)
Key Interfaces:
IDataContext- Represents a disposable unit of work for read/write operationsIDomain<TConfigurationBinder, TConfigurationOptions>- Domain configuration and mappingICommand- Command pattern for operations without return valuesIUnitOfWork- Transaction boundary abstraction
- Target Frameworks: net8.0 and net9.0
- Nullable Reference Types: Enabled
- StyleCop: Enforced code style with custom ruleset
- Central Package Management: Versions managed in
Directory.Packages.props - Documentation: XML documentation required for public APIs
The project includes comprehensive test coverage:
Unit Tests: Located in src/tests/DataJam.Testing.UnitTests/
Integration Tests: Database-specific integration tests for different providers:
- SQL Server:
DataJam.EntityFrameworkCore.MsSql.IntegrationTests - MySQL:
DataJam.EntityFrameworkCore.MySql.IntegrationTests - SQLite:
DataJam.EntityFrameworkCore.Sqlite.IntegrationTests
Integration tests use Testcontainers for database provisioning.
- Main Branch:
main - Development Branch:
develop - Feature Branches:
feature/* - CI: GitHub Actions workflow runs on all pushes
- Package Publishing: Automated NuGet publishing from main branch when
NuGetApiKeyis available
The build system uses GitVersion for semantic versioning and automatically creates pre-release packages for non-main branches.