2013-04-09 3 views
1

У меня возникла проблема с отображением массива на тип .... Я получаю следующую ошибку:automapper: отображение из массива в одно поле?

Отсутствует конфигурация карты типа или неподдерживаемое отображение.

типы карт: Run [] -> Run

Пункт назначения является Run и источником является Run (массив) .... Я насторить отображения в global.asax

Mapper.CreateMap<Model.Run, Run>(); 

Любые идеи, я думаю, что чего-то не хватает.

Цените помощь

Благодаря

ответ

5

AutoMapper может автоматически сопоставить коллекцию-к-коллекции, когда вы определили отображение типа, поэтому если у вас есть:

Mapper.CreateMap<Model.Run, Run>(); 

вы можете просто пойти с

var runs = Mapper.Map<IEnumerable<Model.Run>, IEnumerable<Run>>(source); 

потому что он следует естественным образом - он отображает каждый элемент коллекции источника в коллекцию назначения, используя указанную вами карту «один-к-одному». Не следует автоматическое T -> T[] или T[] -> T картирование, что должен делать картограф при отображении T[] -> T? Возьмите первый элемент из массива? Или, может быть, последний? Что-то вроде агрегации? Что делать, если коллекция пуста?

Вы должны написать отдельную полную карту для этого, например:

Mapper.CreateMap<Model.Run[], Run>() 
     .ForMember(x => x.NumericMember, expr => expr.MapFrom(y => y.Sum(z => z.NumericMember))) 
     .ForMember(//etc...); 
+0

Спасибо, вот что я искал creatmap с массивом и не массив, не понимаете, что вы могли бы сделать это. Да, массив должен содержать только один элемент или 0 ... следовательно, целевой объект должен быть NULL или содержать элемент из элемента исходной формы @ position 0 – Martin

+0

@Martin Нет ничего стоящего на вашем пути, когда вы явно и полностью определяете свой карту, вы можете сопоставить все (или почти все) :) –

Смежные вопросы