Automapper - отображать список сложных объектов в список свойств - PullRequest
0 голосов
/ 25 октября 2018

У меня есть следующий класс DomainObject:

public class MyDomainObj
{
   public CUSTOMER customer {get;set;} // This is database entity
   public ORDER order {get;set;}
}

Мой DTO выглядит так:

public class MyDTO
{
   public string custId{get;set;}
   public strinf orderId{get;set;}
}

Допустим, в таблице CUSTOMER у меня есть атрибут с именем: customer_id то же самое для ORDER таблицы: order_id

Вот моя конфигурация автоматического средства:

m.CreateMap<CUSTOMER, MyDTO>().ForMember(d => d.custId, o => o.MapFrom(s => s.customer_id));
m.CreateMap<ORDER, MyDTO>().ForMember(d => d.orderId, o => o.MapFrom(s => s.order_id));

Я написал метод расширения для картографа, чтобы он работал:

public static class ExtensionAutoMapper
{
    public static TDestination Map<TSource, TDestination>(this TDestination destination, TSource source)
    {
        return Mapper.Map(source, destination);
    }
}

Использование:

var response = Mapper.Map<MyDTO>(myDomainObj.customer)
                .Map(myDomainObj.order);

Это прекрасно работает.

Вопрос:

  • Как изменить конфигурацию отображения вЧтобы отобразить список объектов домена в список dto?

что-то вроде этих строк

var response = Mapper.Map<List<MyDomainObj>, List<MyDTO>>(myDomainObj);

Редактировать: Я хотел бы отобразить поля в базе данныхЕсли объект имеет одно и то же имя, он автоматически переходит в свойства.

Ответ предоставлен @jmoerdyk, решите мою проблему.Однако при таком подходе мне необходимо отобразить все поля объекта базы данных в dto, даже если они имеют одинаковые имена.

1 Ответ

0 голосов
/ 25 октября 2018

Вы просто предоставляете сопоставление от MyDomainObj до MyDto, и оно должно быть в состоянии обработать сопоставление коллекций:

Mapper.CreateMap<MyDomainObj,MyDTO>()
    .ForMember(d => d.custId, o => o.MapFrom(s => s.customer.customer_id))
    .ForMember(d => d.orderId, o => o.MapFrom(s => s.order.order_id));

Затем вызывайте его так же, как вы (при условии, что myDomainObja List<MyDominObj>):

var response = Mapper.Map<List<MyDomainObj>, List<MyDTO>>(myDomainObjList);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...