2013-11-20 3 views
3

Я новичок в AutoMapper и имею пару вопросов относительно сопоставления объектов с объектами. Я сделал некоторую работу, но, похоже, что-то пошло не так.AutoMapper - сопоставление datatable с объектом класса с использованием конвертера customtype

Mapper.CreateMap<IDataReader, OrderDest>().ConvertUsing<OrderDestTypeConverter>(); 

public class OrderDestTypeConverter : ITypeConverter<IDataReader, OrderDest> 
    { 
     public OrderDest Convert(ResolutionContext context) 
     { 
      var dest = new OrderDest(); 
      if (!context.IsSourceValueNull && context.SourceValue is IDataReader) 
      { 
       var dr = (IDataReader) context.SourceValue; 
       dest.OrderQuantityDest = (int) dr["quantity"]; 
      } 
      return dest; 
     } 
    } 

В моем классе репозитория - я делаю это

var crs = new CustomerRespositorySimulator(); 
    DataTable orderlistsource = crs.GetCustomerOrders(12345); 
    var orderlistdest = Mapper.Map<IDataReader, List<OrderDest>>(orderlistsource.CreateDataReader()); 

По какой-то причине отображение не работает. Я даже приложил перерыв в преобразователе пользовательского типа OrderDestTypeConverter класс, и он никогда не попадает.

Я делаю что-то не так, используя конвертер customtype ?.

Цените свою помощь !.

ответ

3

При преобразовании с IDataReader AutoMapper использует специальный IObjectMapper, который игнорирует любые ITypeConverter, которые вы применили к определению отображения. По-видимому, это так, что он полностью контролирует итерацию через читателя.

То, что вы хотите достичь, может быть выполнено с помощью метода ForMember при создании карты.

Mapper.CreateMap<IDataReader, OrderDest>() 
    .ForMember(dest => dest.OrderQuantityDest, opt => opt.MapFrom(src => (int)src["quantity"])); 
Смежные вопросы