Dapper 无法将类型 'Dapper.WrappedReader' 的 object 转换为类型 'System.Data.SqlClient.SqlDataReader'

Dapper Unable to cast object of type 'Dapper.WrappedReader' to type 'System.Data.SqlClient.SqlDataReader'

尝试使用 dapper 获取 SqlDataReader,但出现标题错误。 下面是代码:

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

你可以 see from the source codeWrappedReader 是:

#if DNXCORE50
    internal class WrappedReader : WrappedDataReader

Or:

#else
    internal class WrappedReader : IDataReader, IWrappedDataReader

WrappedDataReaderIWrappedReader 都定义了一个 Reader 属性,这将使您能够获得底层的 SqlDataReader。因此尝试将您的代码更改为:

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

或:

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

话虽这么说,您可能希望为您的 using 子句实际使用原始(包装)reader——这样它就有机会对 .Dispose() 做出反应.如果这样做,您可以在 using 子句的正文中获取 sql reader 并从那时起使用它。