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());