AutoMapper - cartographie de l'enfant collections dans le viewmodel
J'ai un viewmodel qui doit afficher un certain IEnumerable
champ que le point-virgule séparées zone de texte. Au début, je pensais de l'aide DefaultModelBinder
pour le transformer, mais j'ai eu de la difficulté à penser la manière de l'atteindre dans les deux directions (dto <-> viewmodel).
Surnoms est le domaine que je suis en train de l'affichage d'une zone de texte séparés par des point-virgules.
public class Parent
{
public IEnumerable<Child> Children { get; set; }
}
public class Child
{
public IEnumerable<string> Nicknames { get; set; }
}
J'ai donc décidé d'essayer AutoMapper, j'ai créé deux Viewmodel:
public class ParentViewModel
{
public IEnumerable<ChildViewModel> Children { get; set; }
}
public class ChildViewModel
{
public string Nicknames { get; set; }
}
Ensuite, j'ai créé des mappages, comme pour les enfants (omis de l'autre -, la conversion par souci de concision)
Mapper.CreateMap<Child, ChildViewModel>().ForMember(
d => d.Nicknames, o => o.ResolveUsing<ListToStringConverter>().FromMember(s => s.Nicknames);
Ensuite, pour le parent, a créé un naïf carte (encore une fois, omis l'autre sens)
Mapper.CreateMap<Parent, ParentViewModel>();
J'ai vraiment attendu l'enfant mappages de se produire automatiquement, mais ils ne le font pas, j'ai déjà créé trop de "bon" code pour résoudre un problème très simple qui, dans tous les autres simples/les anciens non-MVC environnement, je me serais fait un il y a longtemps 🙂 Comment puis-je procéder et dire AutoMapper de transformer les enfants sans écrire un autre "membre enfant "resolver".
Ai-je overthought cet et il y a un moyen plus simple?
Merci!
OriginalL'auteur Madd0g | 2011-11-25
Vous devez vous connecter pour publier un commentaire.
essayer
Mapper.Map
sur le parentavez-vous les mêmes noms pour les propriétés dans
ChildViewModel
et laParent
Non, vous n'avez pas le même type de propriétés dans
Child
etChildViewModel
Hum, intéressant, il ne fonctionne que si ils ont le même nom, j'ai eu différents noms, parce que mon viewmodel hérite de ma classe de données. J'ai changé et ajouté le
new
mot-clé dans la déclaration de la propriété et maintenant il fonctionne comme prévu. Merci!OriginalL'auteur Rafay
Trouvé cette solution https://stackoverflow.com/a/7555977/1586498, qui fonctionne pour moi:
La
ToISet
fonction est définie dans le lien ci-dessus.Plus simple, les exemples de "juste travail" dans LinqPad - de sorte que davantage de recherche est nécessaire.
Une liste complète d'un programme de travail:
OriginalL'auteur OzBob