C# 带前缀的自动映射器

C# 带前缀的自动映射器,c#,automapper,C#,Automapper,我正在尝试使用Automapper映射到对象,问题是我正在尝试映射的对象中有一个在其所有属性前面有前缀“Cust_”,而另一个没有。是否有一种方法可以制作此映射 比如说我有 class A { String FirstName { get; set; } String LastName { get; set; } } class B { String Cust_FirstName { get; set; } String Cust_LastNam

我正在尝试使用Automapper映射到对象,问题是我正在尝试映射的对象中有一个在其所有属性前面有前缀“Cust_”,而另一个没有。是否有一种方法可以制作此映射

比如说我有

class A
{
      String FirstName { get; set; }
      String LastName { get; set; }
}

class B
{
      String Cust_FirstName { get; set; }
      String Cust_LastName { get; set; }
}
显然这张地图不起作用

AutoMapper.Mapper.CreateMap<A, B>();
b = AutoMapper.Mapper.Map<A, B>(a);
AutoMapper.Mapper.CreateMap();
b=自动映射器映射器映射(a);
Mapper.Initialize(cfg=>
{
cfg.识别目的前缀(“客户”);
CreateMap();
});
A=新的A(){FirstName=“Cliff”,LastName=“Mayson”};
B=映射器.Map(a);
//b、 库斯特乌的名字是“克里夫”
//b、 客户姓“梅森”
或者:

Mapper.Configuration.RecognizeDestinationPrefixes("Cust_");
Mapper.CreateMap<A, B>();
...
B b = Mapper.Map<A, B>(a);
...
Mapper.Configuration.RecognizeDestinationPrefixes(“客户”);
CreateMap();
...
B=映射器.Map(a);
...

文档中有一篇关于

有时,您的源/目标属性将具有常见的前置/后置补丁,这导致您必须执行一系列自定义成员映射,因为名称不匹配。要解决此问题,您可以识别修复前/修复后:

public class Source {
    public int frmValue { get; set; }
    public int frmValue2 { get; set; }
}
public class Dest {
    public int Value { get; set; }
    public int Value2 { get; set; }
}
Mapper.Initialize(cfg => {
    cfg.RecognizePrefix("frm");
    cfg.CreateMap<Source, Dest>();
});

干杯这两种方法都非常有效。虽然这两种方法似乎并不特定于实际的映射A到B,但实际上会影响任何其他映射,例如A到BC@CliffMayson但我不认为这是有问题的,特别是在多个目标类遵循相同约定的情况下。如果确实需要单独的配置,例如需要不同的逻辑来映射相同的两个类,则始终可以使用各自的配置创建专用的
MappingEngine
s。嗯。
public class Source {
    public int frmValue { get; set; }
    public int frmValue2 { get; set; }
}
public class Dest {
    public int Value { get; set; }
    public int Value2 { get; set; }
}
Mapper.Initialize(cfg => {
    cfg.RecognizePrefix("frm");
    cfg.CreateMap<Source, Dest>();
});
Mapper.Initialize(cfg => {
    cfg.ClearPrefixes();
    cfg.RecognizePrefixes("tmp");
});