J'essaie de faire la requête suivante en utilisant dapper mais cela renvoie toujours un jeu de résultats vide. J'ai d'abord essayé de supprimer la clause WHERE
afin d'isoler le problème, mais cela n'a pas fonctionné. Après cela, j'ai ajouté un alias à la colonne C.NAME
dans la clause SELECT
, mais cela n'a pas fonctionné non plus.
private const string SelectClaims =
@"SELECT C.NAME FROM CLAIMS C
INNER JOIN USERS_CLAIMS UC ON C.ID = UC.ID_CLAIM
WHERE UC.ID_USER = @Id";
using (var conn = new FbConnection(connectionString))
{
var claims = conn.Query<string>(SelectClaims, new { user.Id });
return claims;
}
Si je remplace la requête ci-dessus pour cela, tout fonctionne bien:
SELECT NAME FROM CLAIMS
Alors, j'ai mis cela de côté et je suis allé faire autre chose et après être revenu pour essayer de résoudre mon problème, tout fonctionnait bien. Je n'ai rien changé dans mon code et étonnamment, il fonctionne maintenant.
Je ne sais pas s'il est possible qu'une transaction en attente dans ma requête MiTeC Interbase me bloque pour voir les enregistrements actuels de la base de données. J'essaie de simuler cela à nouveau et maintenant il retourne toujours les enregistrements dont j'ai besoin (mieux que rien, hehe).
Pour plus de clarté, il est parfait d'utiliser une chaîne comme type de données renvoyé, effectuez une simple jointure avec un paramètre sql à une méthode Query ou n'utilisez pas du tout d'alias pour la colonne retournée (uniquement si toutes les colonnes correspondent à vos noms de propriété C #) ou vous avez juste une colonne dirigée vers une chaîne comme moi).
Pour être honnête, je ne suis pas sûr que vous utilisiez Dapper correctement puisque vous sélectionnez column nommée et que vous l'associez à une string
simple. Je pense que Dapper ne voit pas la propriété 'Name' comme échouant silencieusement. Je suppose que vous devriez essayer Query<T>
avec un objet fortement typé ou utiliser Query<dynamic>
pour éviter la création de classe inutile.