简体   繁体   中英

Nested Collection Mapping in Automapper

Am trying to map nested collections using automapper and I have done the basic setup and configuration. When I try to do the map it the nested values are coming as null . I have tried to follow few posts and put together something. I want the list to have a hierarchy instead of flattening. Any help around this would be great.

Source Entities:

public class OuterEntity
{
    public int ID { get; set; }
    public string Name { get; set; }
    public List<InnerEntity> InnerEntityList { get; set; }
}

public class InnerEntity
{
    public int InnerId { get; set; }
    public string InnerName { get; set; }
    public List<InnerMostEntity> InnerMostList { get; set; }
}

public class InnerMostEntity
{
    public int InnerMostId { get; set; }
    public string InnerMostName { get; set; }
    public DateTime ModifiedDate { get; set; }
} 

Destination Entities:

public class OuterEntityDTO
{
    public int ID { get; set; }
    public string Name { get; set; }
    public List<InnerEntity> InnerEntityList { get; set; }
}

public class InnerEntityDTO
{
    public int InnerId { get; set; }
    public string InnerName { get; set; }
    public List<InnerMostEntity> InnerMostList { get; set; }
}

public class InnerMostEntityDTO
{
    public int InnerMostId { get; set; }
    public string InnerMostName { get; set; }
    public DateTime ModifiedDate { get; set; }
}

Controller Class:

public List<OuterEntityDTO> GetAll()
{

var outerEntityList = myRepo.GetAll(); //Type of List<OuterEntity>  

var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<OuterEntity, OuterEntityDTO>().ReverseMap();
    cfg.CreateMap<InnerEntity, InnerEntityDTO>().ReverseMap();
    cfg.CreateMap<InnerMostEntity, InnerMostEntityDTO>().ReveseMap();
});

config.AssertConfigurationIsValid();

var innerMostDTO = Mapper.Map<List<OuterEntity>,List<OuterEntityDTO>>(outerEntityList);

//The inner list at first level itself is null.
return innerMostDTO;
}

Am trying to achieve this in DOT NET Core. Autommaper version is 6.1.1

I think you should have a wrong class hierarchy in DTO classes, as you have

public List<InnerMostEntity> InnerMostList { get; set; }

in public class InnerEntityDTO, you should write it as

public List<InnerMostEntityDTO> InnerMostList { get; set; }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM