Comment configurer la cartographie automapper lorsque je veux utiliser le comportement à partir de edit strud> p> Maintenant d'exemple d'utilisation. J'ai un configuration de mappage: p> premier cas - Propriété de destination Et la logique ressemble à ceci: p>
EveluStiningValue code>, mais uniquement lorsque la propriété de destination n'est pas
null code>. p>
itemViewModel CODE> classe et je veux mapper sur l'élément
code> classe. p>
item.Détails code> La propriété n'est pas null. Maintenant, je veux STORPAPPER à utiliser forte> cette instance de destination de
Détails code> propriété, car ce n'est pas null. P>
var item = new Item {
Details = null
};
var itemViewModel = new ItemViewModel {
Details = new DetailsViewModel {
Info = "New text"
}
};
Mapper.Map(itemViewModel, item);
3 Réponses :
Je pense que l'option Modifier strud> P> On dirait que vous pourriez avoir besoin de Ajoutez une petite logique conditionnelle à votre mappage pour plus de détails (et ignorez l'option nullsubstitute code> fonctionnerait pour vous. Voir: http: //weblogs.asp .NET / PSTEELEE / Archive / 2011/03/18 / Automapper-Null-Membres.aspx
EveluStinyStinuleValue): P>
.ForMember(d => d.Details,
o => o.MapFrom(s => s.Details == null ? new ItemDetails() : Mapper.Map<ItemDetailsViewModel, ItemDetails>(s.Details))
NullSubstitut est utile lorsque la valeur de la source est null.
J'ai eu ce même problème à traiter avec des entités de NHibernate et j'ai trouvé une solution assez simple. p>
Vous devez initialiser la propriété Détails dans le constructeur ItemViewModel. De cette façon, la valeur de destination n'est pas nulle jamais. Bien sûr, cela ne fonctionne pas dans des cas plus complexes (comme des classes abstraites). P>
avait ce même problème, mais avec EF. Le commentaire des cryses à propos de l'utilisation de Beforemap m'a pointé dans la bonne direction.
J'ai fini avec du code similaire à: p>
dans la méthode Configurer (): P>
Action<ItemViewModel, Item> MapDetailsAction = (source, destination) => { if (destination.Details == null) { destination.Details = new Details(); destination.Details = Mapper.Map<ItemViewModel, Item>( source.Details, destination.Details); } };
Alors, voulez-vous faire autre chose que ce que l'on utiliseValue s'il est null?
Oui, je veux faire autre chose lorsque la propriété de destination est null.
Pourriez-vous fournir un exemple de code de travail de travail vous indiquant comment vous voudriez que les choses mappées cordent ce qu'Auotmapper fait actuellement. Je ne comprends tout simplement pas ce que vous demandez.
Je veux que SomePaper utilise l'instance de destination i> d'une propriété complexe (ne pas créer de nouveau), puis définissez les propriétés internes d'une classe ItemDetails. Mais cela ne devrait fonctionner que lorsque la propriété de détail dans NON NULL (parce que je souhaite utiliser cette instance), alors lorsque la propriété Détails est NULL, n'utilisez pas cette valeur NULL, mais créez une nouvelle instance.
Voir la réponse mise à jour. Je ne pouvais pas le vérifier car vous n'avez pas de cas de test de travail, mais je pense que cela fera ce que vous recherchez.
@Chrisj, avez-vous résolu ce problème?
Malheureusement non. Maintenant, ce que je fais, c'est vérifier si la valeur de la propriété de destination est NULL dans l'action Beforemap.
Si vous êtes toujours intéressé, vous pourrez peut-être adapter cette solution pour répondre à vos besoins.