Dapper donnant "Tentative invalide d'appeler FieldCount lorsque le lecteur est fermé." en essayant d'utiliser "QueryMultiple"

asp.net-web-api2 c# dapper

Question

J'ai une méthode wrapper pour la méthode QueryMultiple de QueryMultiple . Il récupère avec succès les données d'une procédure stockée, qui comporte 3 requêtes, toutes étant des requêtes SELECT . Mais après avoir obtenu les données, je ne peux pas utiliser Read ou ReadAsync pour affecter des données à des variables de classe. Je joins mon code ci-dessous.

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);
            }
        }
    }

Réponse acceptée

Regardez votre méthode MultiQuery . En particulier, regardez le bloc finally . Considérons maintenant: ce bloc a été appelé avant que les données aient été consommées. Fondamentalement, ne faites pas ça.

Si c'était moi:

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

S'il est utile d'écrire une méthode d'extension QueryMultipleSP qui ajoute le type de commande, alors peut-être, mais ...




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi