using (IDataReader dr = DatabaseContext.ExecuteReader(command))
{
if (dr.Read())
{
AutoMapper.Mapper.CreateMap<IDataReader, ProductModel>();
return AutoMapper.Mapper.Map<IDataReader, IList<ProductModel>>(dr);
}
return null;
}
如果博士只有一行 - >错误:引发类型'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'的异常
如果博士 超过一行,则运行确定。
任何帮助?
答案 0 :(得分:7)
问题是Automapper也在调用Read() - 所以试图始终查看第二条记录。如果您在阅读器中有1000行时考虑一下 - AutoMapper如何将其转换为列表而不通过它们遍历所有调用Read()?
更改您的线路以调用HasRows
e.g。
using (IDataReader dr = DatabaseContext.ExecuteReader(command))
{
if (dr.HasRows)
{
AutoMapper.Mapper.CreateMap<IDataReader, ProductModel>();
return AutoMapper.Mapper.Map<IDataReader, IList<ProductModel>>(dr);
}
return null;
}
答案 1 :(得分:-1)
添加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());