Dapper无法强制转换';类型的对象;Dapper.WrappedReader';键入';Syste

本文关键字:Dapper 对象 WrappedReader 键入 Syste 转换 类型 | 更新日期: 2023-09-27 18:00:39

试图使用dapper获取SqlDataReader,但在标题上出现错误。以下是代码:

using (var reader = (SqlDataReader)con.ExecuteReader(query))
                    {
                        while (reader.Read())
                        {
                            //do stuff here with reader
                        } 
                    }

Dapper无法强制转换';类型的对象;Dapper.WrappedReader';键入';Syste

从源代码中可以看出,WrappedReader是:

#if DNXCORE50
    internal class WrappedReader : WrappedDataReader

或者:

#else
    internal class WrappedReader : IDataReader, IWrappedDataReader

WrappedDataReaderIWrappedReader都定义了一个Reader属性,该属性将允许您获取底层SqlDataReader。因此,尝试将您的代码更改为:

(SqlDataReader)((IWrappedDataReader)con.ExecuteReader(query)).Reader { ... }

或者:

(SqlDataReader)((WrappedDataReader)con.ExecuteReader(query)).Reader { ... }

话虽如此,您可能希望实际使用using子句的原始(包装)读取器,这样它将有机会对.Dispose()做出反应。如果你这样做,你可以在using子句的主体中获得sql阅读器,并从那时起使用它。