АвтоМаппер с префиксом - PullRequest
18 голосов
/ 17 февраля 2012

Я пытаюсь использовать 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);

Ответы [ 2 ]

24 голосов
/ 17 февраля 2012
Mapper.Initialize(cfg =>
{
   cfg.RecognizeDestinationPrefixes("Cust_");
   cfg.CreateMap<A, B>();
});

A a = new A() {FirstName = "Cliff", LastName = "Mayson"};
B b = Mapper.Map<A, B>(a);

//b.Cust_FirstName is "Cliff"
//b.Cust_LastName is "Mayson"

Или альтернативно:

Mapper.Configuration.RecognizeDestinationPrefixes("Cust_");
Mapper.CreateMap<A, B>();
...
B b = Mapper.Map<A, B>(a);
...
0 голосов
/ 22 ноября 2016

В документации есть статья на Распознавание пре / постфиксов

Иногда ваши свойства источника / назначения будут иметь общие префиксы / постфиксы, которые заставляют вас делать кучу пользовательских сопоставлений элементов, потому что имена не совпадают. Для решения этой проблемы вы можете распознать пре / постфиксы:

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.AssertConfigurationIsValid (); По умолчанию AutoMapper распознает префикс «Get», если вам нужно очистить префикс:

Mapper.Initialize(cfg => {
    cfg.ClearPrefixes();
    cfg.RecognizePrefixes("tmp");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...