Pregunta

Tratando de AutoMAPA algunos objetos.
objetos de origen tiene propiedades con _ antes del nombre, objetos de destino - no tienen. ¿Es posible implementar una creación de mapas, que sería AutoMapper mapa todos _properties a las propiedades
para todos los tipos de fuentes.

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; }
}
¿Fue útil?

Solución

Algo he añadido recientemente a AutoMapper podría ayudarle - convenciones de nombres personalizado. Si retira el tronco (R107), mirar alrededor para INamingConvention. En este momento, tengo dos convenciones de nomenclatura (PascalCase y lower_case_underscore), pero no deja de ser una cuestión de averiguar la expresión regular correcta para que te va:

INamingConvention.cs

En este momento, las convenciones de nomenclatura son globales y el perfil de ámbito. Dado que esta característica es nueva, no hay ninguna documentación que no sea las pruebas.

Otros consejos

Esta es la forma en que lo estoy haciendo

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

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

Para esto se podría añadir una asignación personalizada para resolver este caso en 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top