A mapper's execution plans can be validated to ensure that:

  • All target members have matching source values
  • All target complex types can either be constructed, or have mappable target members
  • All members of any source enums being mapped to target enums have matching members in the target enum type

Mapping plan validation is intended to be used during development to make sure nothing is missed - you should remove it in production code.

Validating inline

To validate that a mapping plan created on-the-fly is complete, use:

mapper
    .Map(customerDto).Over(customer, cfg => cfg
        .ThrowNowIfMappingPlanIsIncomplete());

// Or, with separate inline configuration:
mapper
    .Map(customerDto).Over(
        customer, 
        cfg => cfg.Map((d, c) => d.CustomerId).To(c => c.Id),
        cfg => cfg.ThrowNowIfMappingPlanIsIncomplete());

Validating cached mapping plans

To validate all cached mapping plans, use:

// Cache the mapping plans you want to use later:
mapper.GetPlansFor<CustomerDto>().To<Customer>();
mapper.GetPlanFor<Customer>().ToANew<CustomerDto>();
mapper.GetPlanFor<Product>().ToANew<ProductViewModel>();
// etc.

// Validate that the cached plans are all complete:
mapper.ThrowNowIfAnyMappingPlanIsIncomplete();

Validating by default

To configure a mapper to validate mapping plans by default, use:

Mapper.WhenMapping.ThrowIfAnyMappingPlanIsIncomplete();

// All throw if the plan is incomplete:
Mapper.GetPlanFor<Product>().ToANew<ProductDto>();

Mapper.Map(product).ToANew<ProductDto>();

Mapper.Map(product).ToANew<ProductDto>(cfg => cfg
    .Map((p, d) => p.Id).To(d => d.ProductId));