Dapper无法将'Dapper.WrappedReader'类型的对象强制转换为'System.Data.SqlClient.SqlDataReader'

c# dapper

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

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

一般承认的答案

从源代码中可以看出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 reader并从那时起使用它。



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow