2017-01-27 1 views
0

J'ai la classe suivanteAutomapper supprime tous les tableaux lors du mappage même classe

public class Unit 
{ 
    [JsonProperty("id")] 
    public string Id { get; set; } 
    [JsonProperty("unittype")] 
    public UnitType UnitType { get; set; } 
    [JsonProperty("name")] 
    public string Name { get; set; } 
    [JsonProperty("language")] 
    public string Language { get; set; } 
    [JsonProperty("managers")] 
    public List<Manager> Managers { get; set; } 
    [JsonProperty("logoURL")] 
    public string LogoURL { get; set; } 
    [JsonProperty("naceCodeList") 
    public List<string> NaceCodeList { get; set; } 
    [JsonProperty("tags")] 
    public List<string> Tags { get; set; } 
    [JsonIgnore] 
    public string JoinedTags => string.Join(",", Tags); 
    [JsonProperty("respondents")] 
    public List<Respondent> Respondents { get; set; } 
    [JsonProperty("childUnits")] 
    public List<Unit> ChildUnits { get; set; } 
    public string Parent { get; set; } 
} 

J'ai aussi ce qui suit dans le constructeur de mon BaseRepository

 Mapper.Initialize(cfg => 
     { 
      cfg.CreateMap<Unit, Unit>(); 
     }); 

Mon problème est que quand je, dans mon référentiel, faire Mapper.Map(unitToUpdate, unit); il vide toutes les propriétés List<whatever>.

Est-ce le comportement par défaut? Est-ce que je fais quelque chose de mal ici?

Pour être complet, voici ma fonction Mettre à jour l'

public void UpdateUnit(ClaimsPrincipal user, string orgId, Unit unitToUpdate) 
    { 
     var org = Get(user, orgId); 
     var unit = org.GetUnit(unitToUpdate.Id); 
     Mapper.Map(unitToUpdate, unit); 
     Update(user, org); 
    } 

L'objet stocké est un autre type contenant une hiérarchie de Unit objets représentant une entreprise. L'objet org est ce qui est stocké dans la base de données et la classe représentant l'objet org possède ses propres fonctions pour charger Unit objets à l'intérieur de lui-même.

Répondre

0

Je suppose que votre problème est que vous devez d'abord définir les mappages pour toutes les collections des deux objets et après que vous devez définir les mappages pour les objets. L'idée est de passer du bas vers le haut (de l'emboîté à l'unité).

Par exemple (en prenant en considération que les répondants:

Mapper.CreateMap<RespondentDb, RespondentDto>(); 
Mapper.CreateMap<UnitDb, UnitDto>() 
    .ForMember(dest => dest.Respondents, opt => opt.MapFrom(src => src.Respondents); 

Quelques références:

  1. https://github.com/AutoMapper/AutoMapper/wiki/Nested-mappings

  2. https://codereview.stackexchange.com/questions/70856/automapper-mapping-a-nested-collection-to-a-list (ici nous avons un objet qui contient seulement une liste, peut-être c'est bon à savoir aussi car vous pouvez rencontrer le même scénario)

+0

Mais c'est la même classe .. Je suis la cartographie de l'unité à l'unité. C'est juste que l'on est frais à partir de la base de données, et on est modifié depuis le contrôleur mvc qui l'appelle. –

+0

Je ne sais vraiment pas ce scénario parce que je n'ai pas utilisé le mapping de/vers la même classe. Je sais qu'il y a eu quelques problèmes il y a quelques temps liés à cela, donc j'ai évité (un exemple: https://github.com/AutoMapper/AutoMapper/issues/656) –

+0

Peut-être qu'il est préférable de créer un problème de github aussi car ce n'est pas 'T si bien documenté et peut se rapporter à certains chemins internes que nous sommes choisis en développement. –