Releases: cbcrouse/EntityAxis
Release list
EntityAxis v2.0.0
🎉 Major Release – .NET 10 Upgrade & Dependency Stabilization
EntityAxis v2.0 is a platform-focused release that advances the library to the latest .NET runtime while stabilizing core dependencies for long-term maintainability and consistency across samples and documentation.
🚀 What’s New
.NET 10 Upgrade
- All projects now target .NET 10.0
- Establishes a clear, modern runtime baseline for EntityAxis and its samples
Dependency Alignment & Stability
- Upgraded infrastructure dependencies to their .NET 10–compatible versions
- MediatR and AutoMapper are intentionally pinned to pre-license versions to avoid breaking changes introduced by recent licensing shifts
- EF Core packages are fully aligned across all projects to prevent runtime version mismatches
Sample App Fixes
- Updated
SampleApp.Consoleto remain fully functional after runtime and dependency upgrades - Continues to demonstrate EntityAxis CRUD, paging, and key-mapping behavior
- Serves as a reliable reference implementation on .NET 10
Solution & Build Improvements
- Added
EntityAxis.KeyMappersto the solution and build configurations - Improved test package isolation and runner configuration
- Updated solution metadata for Visual Studio 2022 (v18.x)
⚠️ Breaking Changes
- EntityAxis v2.0 requires the .NET 10.0 SDK
- Projects consuming v2.0 must upgrade their runtime and dependency baseline
Previous versions remain available for projects that cannot yet move to .NET 10.
📌 Target Framework Policy
EntityAxis tracks the latest stable .NET release.
Older target frameworks are not actively supported but remain available via prior package versions.
This policy keeps the library:
- Clean and focused
- Aligned with modern .NET capabilities
- Easier to maintain and reason about
💡 Why v2.0?
While the public API remains largely consistent, this release represents a platform-level shift:
- New runtime baseline
- Dependency strategy clarified
- Samples realigned
This makes v2.0 the appropriate semantic version to signal the change.
EntityAxis v1.0.0
🎉 EntityAxis has officially reached v1.0.0!
This release marks the library’s readiness for production use and serves as the baseline aligned with the Clean Architecture in .NET chapter on reducing boilerplate using generics, CQRS, and MediatR.
✨ Highlights
- ✅ Generic command and query services using MediatR, AutoMapper, and FluentValidation
- ✅ EntityFramework-backed service implementations for CRUD operations
- ✅ Modular design across layers (Abstractions, MediatR, EF, Registration)
- ✅ Auto-registration extensions for DI and handler setup
- ✅ Support for custom repository interfaces, enabling gradual adoption
- ✅ Built-in validation and request structures for GetById, GetAll, GetPaged, Create, Update, and Delete
- ✅ Flexible key mapping via
IKeyMapperfor differing domain and DB identifiers - ✅ Extensive documentation and examples via the Getting Started Wiki
📚 Reference Implementation
This release is validated through a full end-to-end usage in the SampleApp and the book’s chapter walkthrough. It includes examples of:
- Registering
EntityAxisCommandHandlersandEntityAxisQueryHandlers - Creating
CreateModel/UpdateModelclasses for write operations - Swapping out legacy repositories with EntityAxis-backed interfaces
- Retaining support for custom methods alongside generic CRUD
📌 No Breaking Changes
While this release doesn't introduce new features beyond v0.2.0, the v1.0.0 tag formally denotes:
- Stability guarantee for current interfaces and behaviors
- Baseline support for educational material and production usage
- A signal that core abstractions are locked in unless a major revision is planned
EntityAxis v0.2.0
✨ Features
- Introduced
IKeyMapper<TAppKey, TDbKey>abstraction for mapping between application-layer and database-layer entity keys - Added built-in key mapper implementations:
IdentityKeyMapper<T>for cases where key types matchStringToGuidKeyMapperfor mapping string IDs to Guid database keysStringToIntKeyMapperfor mapping string IDs to int database keys
- Updated all internal EntityAxis logic to support separate
TKeyandTDbKeygeneric parameters across services and handlers - Extended the Entity Framework integration to handle
TDbKeyresolution consistently using the registered key mapper
🛠 Fixes
- Improved update handling to use mapped database keys via
IKeyMapperbefore invokingFindAsync - Internal exception messages now display the original (application-layer) key value when entities are not found, improving traceability
⚠️ Breaking Changes
- Services like
EntityFrameworkQueryServiceandEntityFrameworkCommandServicenow support an additionalTDbKeyparameter - Consumers implementing custom EF-based repositories or overrides must account for the
TDbKeytype and inject a suitableIKeyMapperimplementation
🛠 Migration Notes
-
🔧 All applications must now explicitly register an
IKeyMapper<TAppKey, TDbKey>for each entity type used- This is required even if
TAppKeyandTDbKeyare the same (e.g., both areGuid)
- This is required even if
-
If your application and database key types match, use:
services.AddSingleton<IKeyMapper<Guid, Guid>, IdentityKeyMapper<Guid>>();
-
If your application uses a string ID mapped to a database Guid, use:
services.AddSingleton<IKeyMapper<string, Guid>, StringToGuidKeyMapper>();
-
📦 Make sure to reference the
EntityAxis.KeyMapperspackage to access built-in key mapper implementations
EntityAxis v0.1.1
🛠️ Fixes
- Fixed broken assembly scanning behavior for registering entity command and query services
- Corrected registration logic to ensure custom repository interfaces (e.g.,
IProductQueryRepository) are correctly registered along with base generic interfaces - Services implementing
ICommandService<,>andIQueryService<,>now reliably register all related interfaces, preventing DI resolution failures during handler activation
⚠️ Migration Notes
- No breaking changes
- Consumers using
AddEntityAxisCommandAndQueryServicesFromAssemblynow benefit from corrected scanning behavior automatically - No manual changes are required unless previous service registration workarounds were implemented
EntityAxis v0.1.0
✨ Features
- Refactored
IEntityId<T>to removesetaccessor, enabling encapsulated domain entities (initorprotected set) - Added
outkeyword toTfor covariance support (e.g., useIEntityId<Guid>asIEntityId<object>) - Removed
Idreset logic fromUpdateEntityHandlerto give consumers full control over identity handling
⚠️ Breaking Changes
- Implementations relying on
public setforIdmust now assign identifiers via constructor or mapping - Consumers must ensure
Idis not overwritten during update mapping (e.g., configure AutoMapper to ignoreId)
🛠 Migration Notes
-
Update your entities to implement
IEntityId<T>usinginitorprotected set -
Configure your mapping profiles to ignore the
Idfield during updatesCreateMap<UpdateOrderModel, Order>() .ForMember(dest => dest.Id, opt => opt.Ignore());
v0.0.1-beta
Initial Release