Repository navigation
Releases
v3.6.1
Dapper 2.1.89 compatibility, improved date/time materialization, and more reliable releases.
Dapper-FluentMap 3.6.1 aligns the library with Dapper 2.1.89, extends mapped date/time conversion coverage, and strengthens compatibility checks and publishing safeguards. The five packages continue to target netstandard2.0, with no intentional public API breaking changes.
What's changed
Dapper 2.1.89 compatibility
The minimum supported Dapper version has increased from 2.1.79 to 2.1.89.
- Updated the supported dependency range to
[2.1.89,3.0.0)(a minimum-version range, not an exact pin). - Verified FluentMap-controlled runtime and generated materialization against the updated Dapper baseline.
- Expanded test coverage for
DynamicParameters, DapperTypeHandlerprecedence, generated registration, and Dommel integration.
Migration note: Applications resolving Dapper versions below 2.1.89 need to update before adopting FluentMap 3.6.1. Review direct and transitive references, regenerate lock files when applicable, and rerun integration tests.
Date and time materialization
FluentMap-controlled runtime and generated materializers now support verified conversions among DateOnly, TimeOnly, DateTime, and TimeSpan, where compatible with the consuming framework and provider values.
Coverage includes nullable values and database NULL, immutable constructor parameters, nested mappings, mapping profiles, and explicit property converters. Registered Dapper TypeHandlers retain precedence in supported runtime paths.
Provider behavior is intentionally scoped: SQL Server DateTime/TimeSpan values and PostgreSQL native date/time values are verified; SQLite ISO text values require an explicit property converter. This is not a universal conversion guarantee for every provider.
Provider compatibility and Native AOT
- Updated the certified SQLite and Oracle client versions.
- Extended provider-backed tests for mapped date/time behavior and Dommel persistence.
- Strengthened generated registration and Native AOT smoke coverage.
- Preserved the documented strict-generated Native AOT boundary rather than claiming universal AOT compatibility.
Security, build, and release reliability
- Updated the build SDK baseline to patched .NET
10.0.403. - Addressed dependency advisories in documentation tooling and test infrastructure.
- Made NuGet publishing more resilient to delayed indexing and safe release retries.
- Added deterministic semantic-version validation across the five packages, including protection against unintended major-version increments.
- Corrected a release-validation exit-code issue that could report a failure after successful validation.
The security dependency updates primarily affect development and test tooling; they do not represent a newly identified vulnerability in FluentMap's published runtime packages.
NuGet packages
All five packages are versioned 3.6.1:
Dapper.FluentMapDapper.FluentMap.DommelFluentMap.DependencyInjectionFluentMap.AnalyzersFluentMap.Generators
Install the core package:
dotnet add package Dapper.FluentMap --version 3.6.1Compatibility
| Component | Version / support |
|---|---|
| FluentMap | 3.6.1 |
| Dapper | [2.1.89,3.0.0) |
| Dommel | [3.5.3,4.0.0) |
| Target framework | netstandard2.0 |
| Public API | No intentional breaking changes |
Documentation and migration
Review the compatibility matrix and migration guide, particularly when using older Dapper versions, custom type handlers, or generated materialization.
Full changelog: v3.6.0...v3.6.1
v3.6.0
Dapper FluentMap v3.6.0
Dapper FluentMap 3.6.0 expands database provider certification, introduces a bilingual documentation portal, and improves internal maintainability and CI validation.
This release focuses on making compatibility guarantees more explicit, strengthening real-database testing, and improving the developer experience.
What's New
Expanded Database Provider Certification
Added mandatory real-database integration tests for Oracle Database Free 23.26.0 and Firebird 5.0.4.
Certified FluentMap Core mapping and materialization scenarios for both providers, including immutable objects, nested mappings, value objects, parameter binding, and synchronous/asynchronous streaming.
Introduced a machine-readable compatibility contract with CI consistency checks.
Clarified provider support boundaries to distinguish Core certification from Dommel integration.
Current certification coverage:
Provider | FluentMap Core | Dommel -- | -- | -- SQLite | Certified | Certified SQL Server | Certified | Certified PostgreSQL | Certified | Certified MySQL | Certified | Certified MariaDB | Certified | Certified Oracle | Certified | Not certified Firebird | Certified | Not certifiedSQL Server CE remains a legacy integration without modern real-database certification.
Bilingual Documentation Portal
Introduced a documentation portal built with Astro and Starlight, with English and Brazilian Portuguese content.
The portal covers:
Getting started and mapping fundamentals
Advanced mapping and runtime isolation
Dependency injection, analyzers, and source generators
Practical examples and integration guides
Migration guidance and compatibility references
Documentation validation now includes translation consistency, internal links, accessibility, and SEO checks.
Code Quality and CI Improvements
Refactored generated materializer diagnostics and source generator internals to reduce cognitive complexity.
Added regression tests for generated mapping edge cases.
Updated Linux CI runner configuration for Ubuntu 26.04.
Improved documentation link validation and automated portal checks.
Compatibility
The release retains the existing .NET Standard 2.0 package targets and documented dependency ranges:
Dapper:
>= 2.1.79and< 3.0.0Dommel:
>= 3.5.3and< 4.0.0
Oracle and Firebird certification applies to FluentMap Core only. Full Native AOT compatibility is not claimed.
See the compatibility matrix for tested provider versions and certification boundaries.
Packages
Version 3.6.0 includes:
Dapper.FluentMapDapper.FluentMap.DommelFluentMap.DependencyInjectionFluentMap.AnalyzersFluentMap.Generators
References
# Dapper FluentMap v3.6.0Dapper FluentMap 3.6.0 expands database provider certification, introduces a bilingual documentation portal, and improves internal maintainability and CI validation.
This release focuses on making compatibility guarantees more explicit, strengthening real-database testing, and improving the developer experience.
What's New
Expanded Database Provider Certification
- Added mandatory real-database integration tests for Oracle Database Free 23.26.0 and Firebird 5.0.4.
- Certified FluentMap Core mapping and materialization scenarios for both providers, including immutable objects, nested mappings, value objects, parameter binding, and synchronous/asynchronous streaming.
- Introduced a machine-readable compatibility contract with CI consistency checks.
- Clarified provider support boundaries to distinguish Core certification from Dommel integration.
Current certification coverage:
| Provider | FluentMap Core | Dommel |
|---|---|---|
| SQLite | Certified | Certified |
| SQL Server | Certified | Certified |
| PostgreSQL | Certified | Certified |
| MySQL | Certified | Certified |
| MariaDB | Certified | Certified |
| Oracle | Certified | Not certified |
| Firebird | Certified | Not certified |
SQL Server CE remains a legacy integration without modern real-database certification.
Bilingual Documentation Portal
Introduced a documentation portal built with Astro and Starlight, with English and Brazilian Portuguese content.
The portal covers:
- Getting started and mapping fundamentals
- Advanced mapping and runtime isolation
- Dependency injection, analyzers, and source generators
- Practical examples and integration guides
- Migration guidance and compatibility references
Documentation validation now includes translation consistency, internal links, accessibility, and SEO checks.
[Documentation portal](https://rodri-oliveira-dev.github.io/Dapper-FluentMap/)
Code Quality and CI Improvements
- Refactored generated materializer diagnostics and source generator internals to reduce cognitive complexity.
- Added regression tests for generated mapping edge cases.
- Updated Linux CI runner configuration for Ubuntu 26.04.
- Improved documentation link validation and automated portal checks.
Compatibility
The release retains the existing .NET Standard 2.0 package targets and documented dependency ranges:
- Dapper:
>= 2.1.79and< 3.0.0 - Dommel:
>= 3.5.3and< 4.0.0
Oracle and Firebird certification applies to FluentMap Core only. Full Native AOT compatibility is not claimed.
See the [compatibility matrix](https://github.com/rodri-oliveira-dev/Dapper-FluentMap/blob/v3.6.0/COMPATIBILITY.md) for tested provider versions and certification boundaries.
Packages
Version 3.6.0 includes:
Dapper.FluentMapDapper.FluentMap.DommelFluentMap.DependencyInjectionFluentMap.AnalyzersFluentMap.Generators
References
v3.5.0
Dapper FluentMap v3.5.0
Dapper FluentMap 3.5.0 extends generated materialization, advanced mapping capabilities, and Dommel persistence integration while strengthening API compatibility and regression testing.
This release focuses on improving mapping flexibility, reducing reflection requirements in supported scenarios, and making runtime behavior more predictable.
What's New
Generated Materialization and Native AOT
- Introduced reflection-free
GeneratedParametersfor parameterized queries using strict generated materialization. - Expanded generated materializer support to accept additional reader columns that do not conflict with explicitly mapped members.
- Improved diagnostics for missing, duplicate, ambiguous, and incompatible columns.
- Added contextual
FluentMapConfigurationExceptionerrors for generated value-conversion failures. - Expanded Native AOT smoke tests and provider compatibility coverage.
Strict generated materialization provides a controlled path for supported scenarios. Full Native AOT compatibility is not claimed.
Advanced Mapping Capabilities
- Added three-input multi-mapping with multiple validated
splitOnboundaries. - Introduced per-segment mapping profiles and asynchronous execution.
- Improved null-child handling and isolated runtime support.
- Added explicit
ConstructUsing(...)factory strategies for constructing entities from one to four mapped values. - Unified two-input and three-input multi-mapping through a shared segment materialization pipeline.
These changes provide more control over complex query results and immutable domain models.
Dommel Write Converters
Introduced InsertMapped* and UpdateMapped* operations that apply configured property converters during persistence.
The new operations preserve:
- Insert/update property exclusions
- Read-only and computed property behavior
- Existing Dapper type-handler precedence
Write conversion applies to the new mapped operations, not automatically to every standard Dapper or Dommel write.
API Compatibility and Diagnostics
- Introduced nullable reference annotations across public projects without changing CLR method signatures.
- Added checked-in public API baselines for all distributed assemblies.
- Integrated API compatibility validation into CI.
- Added analyzer diagnostic
DFM016to identify duplicate explicit construction strategies.
Quality, Testing, and Release Reliability
- Added report-only compatibility canaries for detecting potential dependency compatibility changes.
- Introduced materialization benchmark regression reports with machine-readable results.
- Expanded tests for generated materialization, construction strategies, and mapping edge cases.
- Improved release recovery to preserve release tags and prevent unsafe partial-publication retries.
- Added Codecov integration and refined code quality analysis.
Documentation
- Reorganized the README and detailed usage documentation.
- Improved migration guidance from FluentMap 2.x to 3.x.
- Added Brazilian Portuguese migration and usage guides.
- Updated documentation to clarify supported APIs, generated mapping behavior, and compatibility boundaries.
Compatibility
The release maintains the existing netstandard2.0 consumer targets and supported dependency ranges:
- Dapper:
>= 2.1.79and< 3.0.0 - Dommel:
>= 3.5.3and< 4.0.0
The certified provider matrix for this release covers SQLite, SQL Server, PostgreSQL, MySQL, and MariaDB.
Legacy global mapping APIs remain available. Isolated runtime configuration and advanced generated mapping APIs are opt-in.
See the [v3.5.0 compatibility documentation](https://github.com/rodri-oliveira-dev/Dapper-FluentMap/blob/v3.5.0/COMPATIBILITY.md) for details.
Packages
Version 3.5.0 includes:
Dapper.FluentMapDapper.FluentMap.DommelFluentMap.DependencyInjectionFluentMap.AnalyzersFluentMap.Generators
References
- [Repository](https://github.com/rodri-oliveira-dev/Dapper-FluentMap)
- [Migration guide](https://github.com/rodri-oliveira-dev/Dapper-FluentMap/blob/v3.5.0/MIGRATION.md)
- [Compatibility documentation](https://github.com/rodri-oliveira-dev/Dapper-FluentMap/blob/v3.5.0/COMPATIBILITY.md)
- [Full changelog — v3.4.0...v3.5.0](v3.4.0...v3.5.0)
v3.5.0-rc.2
What's Changed
- chore(sonar): exclude eng tooling from analysis by @rodri-oliveira-dev in #210
- docs: reorganize usage and migration documentation by @rodri-oliveira-dev in #211
- Complete the FluentMap 3.x generated/AOT and API governance roadmap by @rodri-oliveira-dev in #217
- Prepare FluentMap 3.5.0 release by @rodri-oliveira-dev in #218
- fix: preserve release tag during rollback by @rodri-oliveira-dev in #224
- fix: fail release preflight on partial publication by @rodri-oliveira-dev in #225
Full Changelog: v3.4.0...v3.5.0-rc.2
v3.4.0
Dapper.FluentMap 3.4.0
Dapper.FluentMap 3.4.0 expands the maintained 3.x line with first-class multi-mapping, asynchronous multiple-result-set APIs, stricter generated materialization, broader database-provider certification, and a hardened release supply chain.
This release keeps the core packages on netstandard2.0 while substantially increasing the behavior validated by the project's automated compatibility matrix.
Highlights
FluentMap-controlled multi-mapping
FluentMap now provides first-class two-type multi-mapping through:
QueryMapped<TFirst, TSecond, TReturn>(...)The API supports:
splitOnboundaries;per-segment mapping profiles;
immutable objects;
nested mappings;
value objects;
property converters;
Dapper
TypeHandlerinteroperability;isolated
FluentMapRuntimeconfiguration.
LEFT JOIN scenarios are also handled so an absent child segment can be represented correctly instead of materializing an invalid object.
Async multiple-result-set materialization
The mapped multiple-result API now includes asynchronous counterparts:
QueryMultipleMappedAsync(...)
ReadMappedAsync<T>(...)
ReadMappedSingleAsync<T>(...)
ReadMappedSingleOrDefaultAsync<T>(...)MappedGridReader preserves ordered result-set consumption and now rejects concurrent reads deterministically, while supporting cancellation and predictable disposal behavior.
Strict generated materialization
Applications that want to avoid runtime materialization fallback can now opt into a generated-only path using:
UseStrictGeneratedMaterialization()
QueryGeneratedMapped*()Unsupported shapes fail deterministically instead of silently falling back to reflection-based runtime materialization.
Generated materializers also support safe permutations of distinct result columns, improving generated-path coverage for projections whose column order differs from the registered shape.
A dedicated Native AOT smoke test validates the strict generated SQLite path on win-x64.
Full Native AOT compatibility is not claimed. Reflection-based assembly scanning, arbitrary runtime fallback, and other dynamic scenarios remain outside the supported Native AOT boundary.
Provider certification
Provider compatibility is now continuously validated against real database instances in CI.
Provider | Validated version -- | -- SQLite | Microsoft.Data.Sqlite 10.0.12 SQL Server | SQL Server 2022 CU23 / Microsoft.Data.SqlClient 7.1.0 PostgreSQL | 18.6 / Npgsql 10.0.3 MySQL | 8.4.11 / MySqlConnector 2.6.2 MariaDB | 11.8.9 / MySqlConnector 2.6.2The SQL Server, PostgreSQL, MySQL, and MariaDB lanes are mandatory and fail closed when the database service or test configuration is unavailable.
These tests exercise mapped reads, generated/runtime materialization, multiple result sets, streaming, and relevant Dommel persistence scenarios.
Dapper compatibility
The supported Dapper range is now consistently defined and tested as:
Dapper [2.1.79, 3.0.0)The CI matrix validates both:
minimum supported: 2.1.79
latest stable: 2.1.89
This aligns package metadata, documentation, and the versions exercised by CI.
Package family
The 3.4.0 release contains:
Dapper.FluentMapDapper.FluentMap.DommelFluentMap.DependencyInjectionFluentMap.AnalyzersFluentMap.Generators
The FluentMap.* names are NuGet PackageIds only. Assemblies, namespaces, and public APIs remain under Dapper.FluentMap.*.
All packages continue to target netstandard2.0.
Release and supply-chain hardening
The release pipeline now provides stronger artifact verification and provenance, including:
CodeQL analysis;
dependency review gates;
deterministic package inventory;
SHA-256 checksums;
SPDX 2.3 SBOM generation;
GitHub artifact attestations;
release artifact manifest;
consumer smoke tests;
validation of existing NuGet artifacts before publication;
governed publication to NuGet.org and GitHub Packages.
Release and recovery workflows have also been aligned with the repository's main branch.
Compatibility notes
The historical static APIs remain available, including:
FluentMapper.Initialize(...)
EntityMap<TEntity>
Map(...).ToColumn(...)
Ignore()For applications that need isolated FluentMap configuration, prefer FluentMapConfigurationBuilder and FluentMapRuntime.
The following remain intentionally outside the current compatibility claims:
Dapper versions outside
[2.1.79, 3.0.0);Dommel versions outside
[3.5.3, 4.0.0);full Native AOT compatibility;
per-runtime isolation of Dommel's global configuration;
three-or-more-type multi-mapping;
graph aggregation;
CRUD generation.
Upgrade from 3.0.x
Existing applications using the historical FluentMap APIs can continue using them.
When upgrading, keep all FluentMap packages on the same release version and review the newer APIs only where they provide value to your application:
use
FluentMapRuntimewhen configuration isolation is required;use
QueryMapped<TFirst,TSecond,TReturn>for FluentMap-controlled two-type multi-mapping;use
QueryMultipleMappedAsyncfor asynchronous multiple-result processing;use strict generated materialization when deterministic generated-only behavior is required.
For applications consuming the auxiliary DI, analyzer, or generator packages, use the current PackageIds:
FluentMap.DependencyInjection
FluentMap.Analyzers
FluentMap.GeneratorsThank you
Thanks to everyone who has used, tested, reported issues, reviewed changes, or contributed to the continued maintenance of Dapper.FluentMap.
Full changelog:
v3.0.3...v3.4.0
v3.0.3
Dapper-FluentMap 3.0.3
This release focuses on stabilizing the FluentMap 3.x package family, improving Dommel mapping behavior, modernizing package distribution, and making the release pipeline significantly more reliable.
Highlights
Simplified NuGet package identities
Three supporting packages now use FluentMap-focused NuGet package IDs:
Dapper.FluentMap.DependencyInjection→FluentMap.DependencyInjectionDapper.FluentMap.Analyzers→FluentMap.AnalyzersDapper.FluentMap.Generators→FluentMap.Generators
The core package identities remain unchanged:
Dapper.FluentMapDapper.FluentMap.Dommel
Only the NuGet package identities changed. Existing assembly names, namespaces, project identities, and public APIs are preserved.
For new installations:
dotnet add package Dapper.FluentMap --version 3.0.3
dotnet add package Dapper.FluentMap.Dommel --version 3.0.3
dotnet add package FluentMap.DependencyInjection --version 3.0.3
dotnet add package FluentMap.Analyzers --version 3.0.3
dotnet add package FluentMap.Generators --version 3.0.3Fixes
- Fixed Dommel property resolution so FluentMap configuration remains deferred until the result is enumerated.
- Preserved the expected behavior when mappings are registered after
ResolvePropertiesis called but before enumeration.
Maintainability
A broad internal refactoring reduced complexity across:
- core mapping validation;
- runtime materialization;
- analyzers;
- source generators;
- Dommel property/column resolution;
- release artifact validation.
These changes are internal and are intended to preserve existing public API and runtime behavior.
Packaging and tooling
- Modernized NuGet package metadata.
- Added and adopted the
.slnxsolution format while retaining the traditional.slnfor compatibility. - Updated Roslyn analyzer dependencies.
- Improved repository configuration and development tooling.
- Added stronger package metadata and release artifact validation.
Release reliability
The release infrastructure received substantial hardening in this version.
NuGet.org publication now treats package acceptance and package indexing as separate operations. All missing packages are submitted first, without blocking the package set while NuGet.org performs asynchronous validation and indexing.
After submission, the pipeline performs a bounded convergence phase and validates published primary package contents against the original release artifacts.
Release recovery is also resumable and idempotent, with safeguards for partially published releases.
Additional release safeguards include:
- NuGet Trusted Publishing through GitHub OIDC;
- independent symbol package publication;
- SHA-256 artifact verification;
- release manifests and dependency inventory;
- GitHub Packages publication;
- GitHub artifact attestations;
- package-content verification before skipping an already published version;
- protected recovery of incomplete releases without overwriting immutable packages.
Compatibility
No intentional public API breaking changes are introduced in 3.0.3.
Consumers of the Dependency Injection, Analyzer, or Generator packages should update their PackageReference to the new package IDs listed above.
Thanks to everyone using and contributing to Dapper-FluentMap. This release lays a stronger foundation for the FluentMap 3.x line, both for consumers and for future maintenance.
Full Changelog: v2.0.0...v3.0.3
v2.0.0
Dapper.FluentMap
- Update to Dapper 2.0.35
Dapper.FluentMap.Dommel
- Update to Dapper.FluentMap 2.0
- Update to Dommel 2.0
v1.8.1
Add conventions to the Dommel column name resolver