Как я использую AutoMapper для мастер-класса детализации - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь отобразить объект ParentChild, но Child не смог отобразить. Я уже настраиваю автомаппер на распознавание мастер-класса и класса деталей.

здесь мой класс и classDTO

public class Master {
    public int id {get;set;}
    public string masterInfo {get;set;}
    public ICollection<Detail> details { get; } = new Collection<Detail>();
}

public class Detail {
    public int id {get;set;}
    public int masterId {get;set;}
    public Master master {get;set;} 
    public string detailInfo {get;set;}
}

public class MasterDTO {
    public int id {get;set;}
    public string masterInfo {get;set;}
    public ICollection<DetailDTO> details { get; } = new Collection<DetailDTO>();
}

public class DetailDTO {
    public int id {get;set;}
    public int masterId {get;set;}
    public MasterDTO master {get;set;} 
    public string detailInfo {get;set;}
}

А вот моя основная программа:

    var config = new MapperConfiguration(cfg => {
                cfg.CreateMap<Master, MasterDTO>();
                cfg.CreateMap<Detail, DetailDTO>();
                });

    IMapper mapper = config.CreateMapper();

    var original1 = new Master { id=1,masterInfo="xxxx", 
        details = { new Detail {id = 11, masterId = 1, detailInfo="aaaa"}, 
                    new Detail {id = 12, masterId = 1, detailInfo="bbbb"}
        }};

    var update = mapper.Map<Master, MasterDTO>(original1);

и Исходное значение:

original1: {Test.Program.Master}
  details [Icollection]: Count = 2
   [0]: {Test.Program.Detail}
     detailInfo [string]: "aaaa"
     id [int] : 11
     master [Master] : null
     masterId [int] : 1
   [1]: {Test.Program.Detail}
     detailInfo [string]: "bbbb"
     id [int] : 12
     master [Master] : null
     masterId [int] : 1
  id [int] : 1
  masterInfo [string]: "xxxx"

и значение обновления / результата:

update: {Test.Program.MasterDTO}
  details [Icollection]: Count = 0
  id [int] : 1
  masterInfo [string]: "xxxx"

Нужен ваш совет. Спасибо - Джигу

1 Ответ

2 голосов
/ 04 марта 2020

вы должны использовать метод ForMember, как этот, чтобы отобразить дочернее свойство

var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Master, MasterDTO>().ForMember(a => a.details, map => map.MapFrom(src => src.details));
    cfg.CreateMap<Detail, DetailDTO>();
});
...