Table of Contents

Data Mapper Generator

DataMapperGenerator emits a fluent DataMapper<TDomain,TData> factory from two attributed projection methods.

[GenerateDataMapper(typeof(OrderAggregate), typeof(OrderRow), FactoryName = "CreateMapper")]
public static partial class GeneratedOrderDataMapper
{
    [DataMapperToData]
    private static OrderRow ToData(OrderAggregate order)
        => new(order.OrderId, order.CustomerId, order.Total, "PAID");

    [DataMapperToDomain]
    private static OrderAggregate ToDomain(OrderRow row)
        => new(row.OrderId, row.BuyerId, row.TotalAmount, OrderState.Paid);
}

The generated method returns a normal runtime mapper:

DataMapper<OrderAggregate, OrderRow> mapper = GeneratedOrderDataMapper.CreateMapper();

Diagnostics

ID Severity Message
PKMAP001 Error The host type must be partial.
PKMAP002 Error Exactly one [DataMapperToData] and one [DataMapperToDomain] method are required.
PKMAP003 Error Projection methods must be static, non-generic, return the target type, and accept one source parameter.

DI Usage

services.AddSingleton<IDataMapper<OrderAggregate, OrderRow>>(_ =>
    GeneratedOrderDataMapper.CreateMapper());

See Order Data Mapper Pattern for the full importable example.