Fals
Fals

Reputation: 6839

Automapper 5.1.1 Can't map Complex object, aways invalid

Here's my issue, I'm trying to map both this entities, and I aways get an exception:

From:

public int IdCorpoGestor { get; private set; }
    public string Nome { get; private set; }
    public string Email { get; private set; }
    public string Federacao { get; private set; }
    public DateTime DataIniMandato { get; private set; }
    public DateTime DataFimMandato { get; private set; }
    public string Telefone1 { get; private set; }
    public string Telefone2 { get; private set; }
    public int IdConselho { get; private set; }
    [ForeignKey("IdConselho")]
    public Conselho Conselho { get; private set; }
    public int IdTipo { get; private set; }
    [ForeignKey("IdTipo")]
    public Indicador Tipo { get; private set; }
    public bool Ativo { get; private set; }
}

To:

public class CorpoGestorDTO
{
    public int IdCorpoGestor { get; set; }
    public string Nome { get; set; }
    public string Email { get; set; }
    public string Federacao { get; set; }
    public DateTime DataIniMandato { get; set; }
    public DateTime DataFimMandato { get; set; }
    public string Telefone1 { get; set; }
    public string Telefone2 { get; set; }
    public int IdConselho { get; set; }
    public int IdTipo { get; set; }
    public bool Ativo { get; set; }
    public string Tipo { get; set; }
}

Mapping:

 Mapper.Initialize(cfg => cfg.CreateMap<CorpoGestor, CorpoGestorDTO>()
            .ForMember(x => x.Tipo, y => y.MapFrom(s => s.Tipo.Nome)));

Calling Mapper from DataBase result:

Mapper.Map<IEnumerable<CorpoGestor>, List<CorpoGestorDTO>>(result);

Exception:

Missing type map configuration or unsupported mapping

EDIT

Openned an issue at the GitHub for AutoMapper, you can have more information there: Automapper 5.1.1 Can't map Complex object, aways invalid #1783

Upvotes: 0

Views: 400

Answers (1)

user47589
user47589

Reputation:

Try the following:

Mapper.Initialize(cfg => 
{
    cfg.CreateMap<CorpoGestor, CorpoGestorDTO>();
    cfg.CreateMap<Indicador, string>().ConvertUsing(x=> x.Nome);
}

You need to convert one data type to another. To do that, the second line is added to your mapping configuration.

Also, you should only call this once. Doing it multiple times will overwrite previous configurations.

Upvotes: 1

Related Questions