Ошибка AutoMapper.Data при отображении

Я использую automapper v4.1.1 и automapper.data1.0.0.beta 1. У меня есть консольное приложение, и мой код сопоставления выглядит так:

Mapper.Initialize(cfg => {
            MapperRegistry.Mappers.Add(new DataReaderMapper {YieldReturnEnabled = true}
            );

            cfg.CreateMap<IDataRecord, AircraftDetails>();

        });

И мой код вызова БД и сопоставление выглядят так

var aircraft=new AircraftDetails();         
        using (SqlConnection connection =
               new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings[_connectionString].ConnectionString))
        {
            SqlCommand command =
                new SqlCommand(storedProcedureAsString, connection);


            command.AddInputParameters(new {a=aircraftId});

            connection.Open();

            SqlDataReader reader = command.ExecuteReader();
            if (reader.HasRows)
            {

               var res = Mapper.Map<IDataReader, IEnumerable<AircraftDetails>>(reader);

                aircraft = res.FirstOrDefault();
            }

        }

        return aircraft;

Когда я запускаю этот код, я получаю сообщение об ошибке:

Необработанное исключение: System.InvalidCastException: указанное приведение недопустимо. в DynamicCreate(IDaRecord) в AutoMapper.Data.DataReaderMapper.d__10.MoveNext() в источнике System.Linq.Enumerable.d__941.MoveNext() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable1)

Любые идеи, что я делаю неправильно?

Ваше здоровье

Исмаил


person Ismail    schedule 15.02.2017    source источник


Ответы (1)


Не уверен, но, возможно, вам следует создать сопоставление не для IDataRecord, а для IDataReader:

cfg.CreateMap<IDataReader, IEnumerable<AircraftDetails>>();

На основе этого вопроса

person viktor.kudria    schedule 15.02.2017
comment
Привет кудря, попробовал, что без радости. Я просто следовал примеру в тесте automapper.data, и вот как это делается, см. github.com/AutoMapper/AutoMapper.Data/blob/master/ test When_mapping_a_data_reader_to_a_dto, поэтому сопоставление - это IDataRecord, но в карте IDataReader имеет смысл, поскольку чтение IDataReader дает вам IDataRecord. - person Ismail; 15.02.2017
comment
Хм, а как насчет cfg.AddMemberConfiguration().AddMember<DataRecordMemberConfiguration>(); в вашем разделе конфигурации? - person viktor.kudria; 15.02.2017
comment
Кудря, не пробовал, так как потом решил использовать что-то другое, так как у меня мало времени, поэтому я выбрал github.com/sixeyed/projects/tree/master/Sixeyed.Mapping, который работает. Я могу попробовать и пересмотреть, если у меня есть время. Большое спасибо за помощь. - person Ismail; 15.02.2017