Ionut
Ionut

Reputation: 47

How can use AutoMapper to map two collections of objects

I try to use AutoMapper but when I what to map 2 collection I get an error. These are my entity and dto classes that I want to use AutoMapper:

public class HeadQuarters
{
    public int Id { get; private set; }
    public string HeadQuartersName { get; set; }
    public string HeadQuartersCode { get; set; }
    public string HeadQuartersDescription { get; set; }        
    public bool IsActiv { get; set; }
    public ICollection<Adresa> Adresa { get; set; }      
}

public class HeadQuartersDTO
{
    public string HeadQuartersName { get; set; }
    public string HeadQuartersCode { get; set; }
    public string HeadQuartersDescription { get; set; }
    public ICollection<AdresaDTO> Addresses { get; set; }        
    public EntityState Status { get; set; }
}

These are my entity and dto collection classes:

public class AdresaDTO
{
    public int Id { get; set; }
    public string Street { get; set; }
    public string StreetNr { get; set; }
    public string Block { get; set; }
    public string Entrance{ get; set; }
    public string Apartment{ get; set; }
    public double? Longitude { get; set; }
    public double? Latitude { get; set; }
    public int? CityId { get; set; }      
    public EntityState Status { get; set; }
}

public partial class Adresa
{
    public int Id { get; private set; }
    public string Street { get; set; }
    public string StreetNr { get; set; }
    public string Block { get; set; }
    public string Entrance{ get; set; }
    public string Apartment{ get; set; }
    public double? Longitude { get; set; }
    public double? Latitude { get; set; }
    public int CityId { get; set; }
    public int? HeadQuartersId { get; set; }
    public int? EmployeeId { get; set; }
    public int? ContractPersonDataId { get; set; }
}

I write this code for to use AutoMapper:

public static HeadQuarters DtoToEntity(HeadQuartersDTO dto)
{
    var mapper = new Mapper(MapperConfiguration());            
    return  mapper.Map<HeadQuarters>(dto);            
}

private static MapperConfiguration MapperConfiguration()
{
    return new MapperConfiguration(cfg =>
        cfg.CreateMap<HeadQuartersDTO, HeadQuarters>()
        .ForMember(dest => dest.Adresa, act => act.MapFrom(src => src.Addresses)));
}

But when I add some in collection I get an error. This is the error message that I get:

enter image description here

Upvotes: 0

Views: 1124

Answers (1)

reynoldsbj
reynoldsbj

Reputation: 339

If I understand what you’re trying to do, you should be able to update your code like this:

public static HeadQuarters DtoToEntity(HeadQuartersDTO dto)
{
    var mapper = new Mapper(MapperConfiguration());            
    return  mapper.Map<HeadQuarters>(dto);            
}

private static MapperConfiguration MapperConfiguration()
{
    return new MapperConfiguration(cfg =>
        cfg.CreateMap<AdresaDTO, Adresa>()
            .ForMember(dest => dest.CityId, act => act.MapFrom(src => src.CityId ?? default(int)))
            .ForMember(dest => dest.HeadQuartersId, act => act.Ignore())
            .ForMember(dest => dest.EmployeeId, act => act.Ignore())
            .ForMember(dest => dest.ContractPersonDataId, act => act.Ignore());
        cfg.CreateMap<HeadQuartersDTO, HeadQuarters>()
            .ForMember(dest => dest.Id, act => act.Ignore())
            .ForMember(dest => dest.IsActiv, act => act.Ignore())
            .ForMember(dest => dest.Adresa, act => act.MapFrom(src => src.Addresses)));
}

Upvotes: 1

Related Questions