Как настроить AutoMapper для преобразования всех коллекций ссылочных типов в коллекции целых чисел? - PullRequest
2 голосов
/ 22 сентября 2010

Допустим, у меня есть следующая сущность:

public class Store
{
    public List<Product> Products { get; set; }
    public List<Employee> Employees { get; set; }
    public List<Camera> Cameras { get; set; }
}

Другими словами, Store, который имеет Products, Employees и безопасность Cameras. Я хочу преобразовать это Store в StoreDTO:

public class StoreDTO
{
    public List<int> ProductIds { get; set; }
    public List<int> EmployeeIds { get; set; }
    public List<int> CameraIds { get; set; }
}

Другими словами, StoreDTO будет иметь только идентификаторы сущностей.

Сейчас я использую этот код для настройки AutoMapper:

Mapper.CreateMap<Product, int>().ConvertUsing(x => x.Id);
Mapper.CreateMap<Employee, int>().ConvertUsing(x => x.Id);
Mapper.CreateMap<Camera, int>().ConvertUsing(x => x.Id);

Как видите, это много стандартного кода. Есть ли способ настроить AutoMapper для автоматического преобразования всех коллекций ссылочных типов в коллекции целых чисел?

1 Ответ

1 голос
/ 22 сентября 2010

Мы делаем это с небольшим количеством LINQ над отражением. Вы можете использовать LINQ для запроса всех типов, которые являются производными от некоторого базового класса Product, Employee и Camera. Затем выполните цикл по этим типам, вызывая методы CreateMap и ConvertUsing.

Нет типового сканирования, о котором можно говорить, поэтому таких вещей на самом деле нет. Но это не так уж плохо делать свое собственное сканирование типов по мере необходимости.

...