试图自动映射某些对象。结果 源对象有_性能名称前,目标对象 - 没有。 是否有可能实现一个地图的创建,是automapper都会_properties映射到性能结果 对于所有源类型。

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; }
}
有帮助吗?

解决方案

我最近加入到AutoMapper东西可以帮助你 - 自定义命名约定。如果检查出的后备箱(R107),到处寻找INamingConvention。现在,我有两个命名约定(PascalCase和lower_case_underscore),但它实际上只是一个找出正确的正则表达式的事让你去:

INamingConvention.cs

现在,命名规范是全球性和配置文件范围的。由于此功能是新的,有不大于测试之外的任何文档。

其他提示

这是我如何做它

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

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

有关这可以添加自定义映射来解决这个特定的情况下:

Mapper.CreateMap<From, To>()
   .ForMember( dest => dest.Id, opt => opt.MapFrom( src => src._Id ) )
   .ForMember( dest => dest.Name, opt => opt.MapFrom( src => src._Name ) );
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top