tags:

views:

535

answers:

1

Is it possible to ignore mapping a member depending on the value of a source property?

For example if we have:

public class Car
{
 public int Id { get; set; }
 public string Code { get; set; }
}

public class CarViewModel
{
 public int Id { get; set; }
 public string Code { get; set; }
}

I'm looking for something like

Mapper.CreateMap<CarViewModel, Car>()
 .ForMember(dest => dest.Code, opt => opt.Ignore().If(source => source.Id == 0))

So far the only solution I have is too use two different view models and create different mappings for each one.

+6  A: 

The Ignore() feature is strictly for members you never map, as these members are also skipped in configuration validation. I checked a couple of options, but it doesn't look like things like a custom value resolver will do the trick. Instead, I'll look at adding a conditional Skip configuration option, like:

Mapper.CreateMap<CarViewModel, Car>()
 .ForMember(dest => dest.Code, opt => opt.Skip(source => source.Id == 0))
Jimmy Bogard
+1 for this feature :)
Chris Missal
Excellent. Thanks very much.
Castrohenge
What's the status of this feature? When can we expect it?
mare
It's in the nightly release. You can find it at the teamcity.codebetter.com site.
Jimmy Bogard