Модель базы данных включает в себя 3 таблицы: Пользователи, Медиа материалы, Типы пользователей.
Соответственно сущность пользователь ссылается на две другие таблицы, образуя связи через Navigation Property.
В своей проекте я использую Automapper следующим образом:
1. Создал класс CommonMapper, который в конструкторе регистрирует все карты. К примеру вот так
Mapper.CreateMap<MediaEntity, MediaContainer>()
Mapper.CreateMap<MediaContainer, MediaEntity>();
Mapper.CreateMap<IEnumerable<MediaContainer>, IEnumerable<MediaEntity>>();
Mapper.CreateMap<IEnumerable<MediaEntity>, IEnumerable<MediaContainer>>();
2. Далее в нем есть метод. Вот его код
public DestinationType Map<SourceType, DestinationType> (SourceType source)
{
return Mapper.Map<SourceType, DestinationType>(source);
}
3. В коде использую к примеру вот так.
UsersContainer test = _mapper.Map<UsersEntity, UsersContainer>(entity);
Проблема в том, что один объект из EF спокойно мапится в DTO контейнер, однако если объекты в коллекции, от используя
_mapper.Map<IEnumerable<UsersEntity>,IEnumerable<UsersContainer>>(entities);
или даже так
_mapper.Map<UsersEntity,UsersContainer>(entities);
всегда получаю одно и то же исключение. Вот внешнее:
Mapping types:
IEnumerable`1 -> IEnumerable`1
System.Collections.Generic.IEnumerable`1[[InstaBot.DAL.Entities.UsersEntity, InstaBot.DAL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> System.Collections.Generic.IEnumerable`1[[InstaBot.DTO.Containers.UsersContainer, InstaBot.DTO, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]
Destination path:
IEnumerable`1
Source value:
System.Collections.Generic.List`1[InstaBot.DAL.Entities.UsersEntity]
А вот InnerException:
Отсутствует реализация метода "GetEnumerator" в типе "Proxy<System.Collections.Generic.IEnumerable`1[[InstaBot.DTO.Containers.UsersContainer_InstaBot.DTO_Version=1.0.0.0_Culture=neutral_PublicKeyToken=null]]_mscorlib_Version=4.0.0.0_Culture=neutral_PublicKeyToken=b77a5c561934e089>" из сборки "AutoMapper.Proxies, Version=0.0.0.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005".
Пробовал уже и карту по-другому создавать. К примеру вот так:
Mapper.CreateMap<UsersEntity, UsersContainer>()
.ForMember(dto => dto.UserTypes, opt => opt.MapFrom(x => x.UserTypes))
.ForMember(dto => dto.Media, opt=>opt.MapFrom(x=>x.Media));
Однако это ничего не дало. Самое интересно то, что объект в контейнер мапится без проблем, а вот коллекция объектов в коллекцию контейнеров никак. Помогите пожалуйста справиться в этой проблемой. Уже какой день не могу ничего понять.
P.S.: не уверен, что проблема из-за Navigation Property, просто на всякий случай уточнил. Наверное все таки неправильно использую автомаппер. Но маппить в цикле по одной сущности, когда их от 1к до 50к это совсем не выход...