Dapper dando "Intento inválido de llamar a FieldCount cuando el lector está cerrado". cuando intentas usar "QueryMultiple"

asp.net-web-api2 c# dapper

Pregunta

Tengo un método de envoltura para el método QueryMultiple de QueryMultiple . Obtiene datos de un Procedimiento almacenado, que tiene 3 consultas, todos ellos son consultas SELECT éxito. Pero después de obtener los datos, no puedo usar Read o ReadAsync para asignar datos a las variables de la clase. Adjunto mi código a continuación.

public Tuple<IEnumerable<T1>, IEnumerable<T2>, IEnumerable<T3>> 
        QueryMultiple<T1, T2, T3>()
    {
        try
        {
            var data = MultiQuery("[App].[USP_GetAllCategories]");
            var category = data.Read<T1>();
            var subcategory = data.Read<T2>();
            var subSubcategory = data.Read<T3>();
            return new Tuple<IEnumerable<T1>, IEnumerable<T2>, IEnumerable<T3>>(
                category, subcategory, subSubcategory);
        }
        catch (Exception)
        {
            return null;
        }
    }

    public SqlMapper.GridReader MultiQuery(string storedProcedureName)
    {
        using (var connection = LocalConnection())
        {
            try
            {
                return connection.QueryMultiple(
                    sql: storedProcedureName,
                    commandType: CommandType.StoredProcedure);
            }
            catch (Exception)
            {
                return null;
            }
            finally
            {
                CloseConnection(connection);
            }
        }
    }

Respuesta aceptada

Mira tu método MultiQuery . En particular, mira el bloque finally . Ahora considere: ese bloque ha sido llamado antes de que los datos hayan sido consumidos. Básicamente, no hagas eso.

Si fuera yo:

using (var connection = LocalConnection())
uaing (var data = conn.QueryMultiple("[App].[USP_GetAllCategories]",
    command type: CommandType.StoredProcedure))
{
    //... Consume
}

Si es útil escribir un método de extensión QueryMultipleSP que agregue el tipo de comando, entonces quizás haga eso, pero ...



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué