2017-01-27 13 views
0

У меня есть следующий классAutomapper удаляет все массивы при картографировании же класса

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; } 
} 

У меня также есть следующие в конструкторе моего BaseRepository

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

Моя проблема заключается в том, что, когда я, в моем репозиторий, do Mapper.Map(unitToUpdate, unit); он опустошает все объекты List<whatever>.

Это поведение по умолчанию? Я здесь что-то не так?

Для полноты, вот моя UpdateUnit функция

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); 
    } 

Сохраненная объект другого типа, содержащий иерархию Unit объектов, представляющих компанию. Объект org - это то, что хранится в базе данных, а класс, представляющий объект org, имеет свои собственные функции для загрузки объектов Unit.

ответ

0

Я предполагаю, что ваша проблема в том, что вам нужно сначала определить сопоставления для всех коллекций из обоих объектов, после чего вам нужно определить отображения для объектов.

Идея состоит в том, чтобы получить снизу вверх (от вложенного до единицы).

Например (принимая во внимание только Ответчики:

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

Некоторые ссылки:

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

  2. https://codereview.stackexchange.com/questions/70856/automapper-mapping-a-nested-collection-to-a-list (здесь у нас есть объект, который содержит только список, возможно, это также хорошо, если вы можете столкнуться с одним и тем же сценарием)

+0

Но это тот же класс .. Я сопоставлен с единицей. Это просто, что он свежий из базы данных, и один из них изменен из контроллера mvc, вызывающего его. –

+0

Я действительно не знаю об этом сценарии, потому что я не использовал отображение из/в тот же класс. Я знаю, что некоторые проблемы были связаны с этим, поэтому я избегал (один пример: https://github.com/AutoMapper/AutoMapper/issues/656) –

+0

Возможно, лучше создать проблему github, так как это isn так хорошо документированы и могут относиться к некоторым внутренним путям, которые мы выбрали в процессе разработки. –