题
试图自动映射某些对象。结果 源对象有_性能名称前,目标对象 - 没有。 是否有可能实现一个地图的创建,是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),但它实际上只是一个找出正确的正则表达式的事让你去:
现在,命名规范是全球性和配置文件范围的。由于此功能是新的,有不大于测试之外的任何文档。
其他提示
这是我如何做它
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 ) );
不隶属于 StackOverflow