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

vNe*_*ext 2 c# idatareader automapper

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

如果dr 只有一行 - >错误:抛出"Microsoft.CSharp.RuntimeBinder.RuntimeBinderException"类型的异常

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

任何帮助?

Dav*_*ker 7

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

更改您的行以调用HasRows

例如

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

        return null;
    }
Run Code Online (Sandbox Code Playgroud)