Automapper: Ignora a condizione di

È ansible ignorare la mapping di un membro in base al valore di una proprietà di origine?

Ad esempio se abbiamo:

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

Sto cercando qualcosa di simile

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

Finora l’unica soluzione che ho è usare due diversi modelli di vista e creare mappature diverse per ognuno.

La funzione Ignore () è strettamente per i membri che non si mappano mai, poiché questi membri vengono saltati anche nella convalida della configurazione. Ho controllato un paio di opzioni, ma non sembra che cose come un risolutore di valori personalizzato faranno il trucco. Invece, vedrò di aggiungere un’opzione di configurazione Skip saltata, come:

 Mapper.CreateMap() .ForMember(dest => dest.Code, opt => opt.Condition(source => source.Id == 0)) 

Mi sono imbattuto in un problema simile, e mentre questo sovrascriverà il valore esistente per dest.Code con null, potrebbe essere utile come punto di partenza:

AutoMapper.Mapper.CreateMap().ForMember(dest => dest.Code,config => config.MapFrom(source => source.Id != 0 ? null : source.Code));