Automapper: Ignorer la condition de
Est-il possible d'ignorer le mappage d'un membre en fonction de la valeur d'une propriété de la source?
Par exemple, si nous avons:
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; }
}
Je suis à la recherche de quelque chose comme
Mapper.CreateMap<CarViewModel, Car>()
.ForMember(dest => dest.Code,
opt => opt.Ignore().If(source => source.Id == 0))
Jusqu'à présent, la seule solution que j'ai est trop utiliser deux différents modèles de vue et de créer des mappings différents pour chacun.
Vous devez vous connecter pour publier un commentaire.
L'Ignore() de la fonction est strictement pour les membres, vous n'avez jamais carte, comme ces membres sont également sauté dans la validation de la configuration. J'ai vérifié un couple d'options, mais il ne ressemble pas à des choses comme une valeur personnalisée de résolution fera l'affaire. Au lieu de cela, je vais regarder à l'ajout d'une conditionnelle Ignorer la configuration de l'option, comme:
J'ai rencontré un problème similaire, et bien que cela va remplacer la valeur existante pour
dest.Code
avec la valeur null, il pourrait être utile comme point de départ:AutoMapper.Mapper.CreateMap().ForMember(dest => dest.Code,config => config.MapFrom(source => source.Id != 0 ? null : source.Code));
AutoMapper.Mapper.CreateMap().ForMember(dest => dest.MyObject,config => config.MapFrom(source => source.Id != 0 ? source : null));
Voici la documentation de la condition de la cartographie:
http://docs.automapper.org/en/latest/Conditional-mapping.html
Il y a aussi une autre méthode appelée Condition préalable très utile dans certains scénarios, car il s'exécute avant la valeur de la source est résolu dans le processus de mappage: