Comment vérifier si un Dapper QueryMultiple a renvoyé des résultats

.net c# dapper

Question

J'ai une méthode de référentiel qui prend des paramètres facultatifs, qui peuvent ou non renvoyer des enregistrements. Si la requête renvoie des enregistrements, tout fonctionne correctement, mais s'il n'y a pas de résultats, une exception est générée dans Dapper. Il ne semble pas y avoir de méthode sur la connexion ou le multi pour me permettre de vérifier si un jeu de résultats a été renvoyé avant d'essayer de lire. Y a-t-il un moyen de faire cela ou est-ce que je fais quelque chose d'illogique ici?

    public ICustomer GetCustomer(int? custId = null, string email = null, string phoneNumber = null)
    {
        using (var connection = GetConnection())
        {
            using (var multi = connection.QueryMultiple("BusinessEntity.usp_Customer_GetCustomer", 
            new { CustId = custId, Email = email, Phone = phoneNumber },
            commandType: CommandType.StoredProcedure))
            {
   Exception -> var customer = multi.Read<Customer>().SingleOrDefault();

                //customer.Address = multi.Read<Address>() as IList<IAddress>;
                //customer.Phone = multi.Read<Phone>() as IList<IPhone>;

                return customer;
            }
        }
    }

L’exception est

Aucune colonne n'a été sélectionnée

        if (reader.FieldCount <= startBound)
        {
            throw MultiMapException(reader);
        }

Réponse populaire

C'était en fait une faille dans la logique de ma procédure stockée. Je sautais conditionnellement la partie où j'ai effectué les sélections multiples en fonction d'une requête précédente pour l'ID client.

ALTER PROCEDURE [BusinessEntity].[usp_Customer_GetCustomer]
   @CustId INT = NULL,
   @Email  VARCHAR(100) = NULL,
   @Phone  VARCHAR(100) = NULL
AS
 BEGIN TRAN;
 IF @CustId IS NULL
     BEGIN
         SELECT @CustId = c.CustomerId
        ...
     END;
         IF @@ROWCOUNT > 1 AND @Cust IS NOT NULL --Wrong
         IF @CustId IS NULL @CustId = 0 --Sort of correct
             BEGIN
                 SELECT ...
                 SELECT ...
                 SELECT ...
             END;
                 COMMIT;
                 RETURN 0;


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