Dapper 无法将“Dapper.WrappedReader”类型的对象转换为“System.Data.SqlClient.SqlDataReader”类型

zul*_*ain 3 c# dapper

尝试使用SqlDataReaderdapper 但在标题上出现错误。下面是代码:

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

Kir*_*oll 7

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

#if DNXCORE50
    internal class WrappedReader : WrappedDataReader
Run Code Online (Sandbox Code Playgroud)

或者

#else
    internal class WrappedReader : IDataReader, IWrappedDataReader
Run Code Online (Sandbox Code Playgroud)

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

(SqlDataReader)((IWrappedDataReader)con.ExecuteReader(query)).Reader { ... }
Run Code Online (Sandbox Code Playgroud)

或者:

(SqlDataReader)((WrappedDataReader)con.ExecuteReader(query)).Reader { ... }
Run Code Online (Sandbox Code Playgroud)

话虽这么说,您可能希望实际使用原始(包装的)阅读器作为您的using子句 - 这样它将有机会对.Dispose(). 如果您这样做,您可以在子句正文中获取 sql readerusing并从那时起使用它。