Skip to content

Releases

v3.6.1

Choose a tag to compare

@github-actions github-actions released this 29 Oct 12:08
026fbcd

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, Dapper TypeHandler precedence, 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.FluentMap
  • Dapper.FluentMap.Dommel
  • FluentMap.DependencyInjection
  • FluentMap.Analyzers
  • FluentMap.Generators

Install the core package:

dotnet add package Dapper.FluentMap --version 3.6.1

Compatibility

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

Choose a tag to compare

@github-actions github-actions released this 13 Oct 19:23
68b9a0b

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 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

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.79 and < 3.0.0

  • Dommel: >= 3.5.3 and < 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.FluentMap

  • Dapper.FluentMap.Dommel

  • FluentMap.DependencyInjection

  • FluentMap.Analyzers

  • FluentMap.Generators

References

# 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 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.79 and < 3.0.0
  • Dommel: >= 3.5.3 and < 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.FluentMap
  • Dapper.FluentMap.Dommel
  • FluentMap.DependencyInjection
  • FluentMap.Analyzers
  • FluentMap.Generators

References

v3.5.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 11:44
35ff3fc

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 GeneratedParameters for 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 FluentMapConfigurationException errors 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 splitOn boundaries.
  • 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 DFM016 to 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.79 and < 3.0.0
  • Dommel: >= 3.5.3 and < 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.FluentMap
  • Dapper.FluentMap.Dommel
  • FluentMap.DependencyInjection
  • FluentMap.Analyzers
  • FluentMap.Generators

References

v3.5.0-rc.2

v3.5.0-rc.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 01 Oct 10:47
35ff3fc

What's Changed

Full Changelog: v3.4.0...v3.5.0-rc.2

v3.4.0

Choose a tag to compare

@github-actions github-actions released this 28 Sep 14:22
d873f74

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:

  • splitOn boundaries;

  • per-segment mapping profiles;

  • immutable objects;

  • nested mappings;

  • value objects;

  • property converters;

  • Dapper TypeHandler interoperability;

  • isolated FluentMapRuntime configuration.

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.2

The 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.FluentMap

  • Dapper.FluentMap.Dommel

  • FluentMap.DependencyInjection

  • FluentMap.Analyzers

  • FluentMap.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 FluentMapRuntime when configuration isolation is required;

  • use QueryMapped<TFirst,TSecond,TReturn> for FluentMap-controlled two-type multi-mapping;

  • use QueryMultipleMappedAsync for 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.Generators

Thank 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

Choose a tag to compare

@github-actions github-actions released this 10 Sep 12:01
b510cd9

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.DependencyInjection
  • Dapper.FluentMap.Analyzers → FluentMap.Analyzers
  • Dapper.FluentMap.Generators → FluentMap.Generators

The core package identities remain unchanged:

  • Dapper.FluentMap
  • Dapper.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.3

Fixes

  • Fixed Dommel property resolution so FluentMap configuration remains deferred until the result is enumerated.
  • Preserved the expected behavior when mappings are registered after ResolveProperties is 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 .slnx solution format while retaining the traditional .sln for 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

Choose a tag to compare

@henkmollema henkmollema released this 23 Aug 09:54
8bad456

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

Choose a tag to compare

@henkmollema henkmollema released this 23 Aug 09:53

Add conventions to the Dommel column name resolver

v1.8.0

Choose a tag to compare

@henkmollema henkmollema released this 28 Mar 13:57
  • Update Dapper to 1.60.1 - fixes #83
  • Fix matching nullable properties in conventions - #82
  • Don't fall back to default mapping when property is ignored - #81

v1.7.0

Choose a tag to compare

@henkmollema henkmollema released this 16 Nov 20:00
  • Use ReflectedType on full .NET and .NET Standard 2.0 (.NET Core 2.0 and .NET Core 2.1) for mapping properties from derived entities.
  • Update Dapper to 1.50.5
  • Releases Dapper.FluentMap.Dommel 1.6.0
    • Update Dapper to 1.50.5
    • Update Dommel to 1.10.1
⌂ 换网址