Pergunta

Tentando AUTOMAP alguns objetos.
Fonte objetos tem propriedades com _ antes do nome, os objetos de destino - não tem. É possível implementar uma criação de mapas, que AutoMapper iria mapear todos _properties às propriedades
para todos os tipos de origem.

class MyMapper<TFrom, TTo>{
    TTo PerformMap(TFrom fromObject){
        Mapper.CreateMap<From, To>(); // ???
        TTo result = Mapper.Map<From, To>(fromObject);
        //result.Id.ShouldBe(value from TFrom._Id);
        return result;
    }
}

class From
{
    public int _Id { get; set; }
    public string _Name { get; set; }
}

class To
{
    public int Id { get; set; }
    public string Name { get; set; }
}
Foi útil?

Solução

Algo que eu adicionado recentemente para AutoMapper pode ajudá-lo - personalizado convenções de nomenclatura. Se você verificar o tronco (R107), olhar ao redor para INamingConvention. Neste momento, tenho duas convenções de nomenclatura (PascalCase e lower_case_underscore), mas é realmente apenas uma questão de descobrir o RegEx certo para você ir:

INamingConvention.cs

Agora, as convenções de nomenclatura são globais e escopo de perfil. Uma vez que este recurso é novo, não há qualquer documentação que não seja os testes.

Outras dicas

Isto é como eu estou fazendo isso

Mapper.Initialize(cfg =>
        {
            cfg.RecognizeDestinationPrefixes(new []{"_"});
            cfg.RecognizePrefixes(new[] { "_" });

            cfg.CreateMap<To, From>().ReverseMap();
        });

Para isso, você pode adicionar um mapeamento personalizado para resolver este caso em particular:

Mapper.CreateMap<From, To>()
   .ForMember( dest => dest.Id, opt => opt.MapFrom( src => src._Id ) )
   .ForMember( dest => dest.Name, opt => opt.MapFrom( src => src._Name ) );
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top