AutoMapper,带有来自IDataReader的列表数据

using (IDataReader dr = DatabaseContext.ExecuteReader(command)) { if (dr.Read()) { AutoMapper.Mapper.CreateMap(); return AutoMapper.Mapper.Map<IDataReader, IList>(dr); } return null; } 

如果dr 只有一行 – >错误: 抛出“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”类型的exception

如果博士有多行,它运行正常

任何帮助?

问题是Automapper也在调用Read() – 所以试图始终查看第二条记录。 如果你想一想,如果你在阅读器中有1000行 – 那么AutoMapper如何将它转换为列表而不通过迭代遍历所有调用Read()?

更改您的行以调用HasRows

例如

 using (IDataReader dr = DatabaseContext.ExecuteReader(command)) { if (dr.HasRows) { AutoMapper.Mapper.CreateMap(); return AutoMapper.Mapper.Map>(dr); } return null; } 

添加AutoMapper.Net4并在CreateMap之前添加映射器,如下所示:

  MapperRegistry.Mappers.Add(new DataReaderMapper()); MapperRegistry.Mappers.Add(new NameValueCollectionMapper()); MapperRegistry.Mappers.Add(new HashSetMapper()); MapperRegistry.Mappers.Add(new ListSourceMapper()); MapperRegistry.Mappers.Add(new TypeConverterMapper());