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.
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());
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();
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));