L'image a un Person
et une classe Group
avec une relation plusieurs-à-plusieurs. Une personne a une liste de groupes et un groupe a une liste de personnes.Comment faire pour ignorer la propriété de la propriété dans le mappage AutoMapper?
Lors du mappage Person
-PersonDTO
J'ai un stack overflow exception
parce AutoMapper ne peut pas gérer la Person
>Groups
>Members
>Groups
>Members
> ...
Alors, voici le code exemple:
public class Person
{
public string Name { get; set; }
public List<Group> Groups { get; set; }
}
public class Group
{
public string Name { get; set; }
public List<Person> Members { get; set; }
}
public class PersonDTO
{
public string Name { get; set; }
public List<GroupDTO> Groups { get; set; }
}
public class GroupDTO
{
public string Name { get; set; }
public List<PersonDTO> Members { get; set; }
}
Lorsque j'utilise .ForMember dans la création d'un mappeur, le premier mappeur qui est exécuté lance un null reference exception
.
Voici le code pour le mappeur:
CreateMap<Person, PersonDTO>()
.ForMember(x => x.Groups.Select(y => y.Members), opt => opt.Ignore())
.ReverseMap();
CreateMap<Group, GroupDTO>()
.ForMember(x => x.Members.Select(y => y.Groups), opt => opt.Ignore())
.ReverseMap();
Alors qu'est-ce que je manque ou faire du tort? Lorsque je supprime les méthodes .ForMember, le null reference exception
n'est plus levé.
MISE À JOUR: Je veux vraiment insister sur le point principal de ma question est comment ignorer une propriété d'une propriété. Ce code est juste un exemple plutôt simple.
MISE À JOUR 2: Voici comment je l'ai fixé, un grand merci à Lucian-Bargaoanu
CreateMap<Person, PersonDTO>()
.ForMember(x => x.Groups.Select(y => y.Members), opt => opt.Ignore())
.PreserveReferences() // This is the solution!
.ReverseMap();
CreateMap<Group, GroupDTO>()
.ForMember(x => x.Members.Select(y => y.Groups), opt => opt.Ignore())
.PreserveReferences() // This is the solution!
.ReverseMap();
Merci à .PreserveReferences()
les références circulaires sont corrigés!
Merci @Esperadoce, mais mon code est un peu moins simple que l'exemple. Je veux vraiment ignorer une ** propriété d'une propriété ** dans AutoMapper. – Mason
oui vous avez raison, je retire mon drapeau! – Esperadoce
Oui @KirillShlenskiy, ils sont en effet des champs, je voulais juste le garder très simple. Je vais mettre à jour ma question. – Mason