vérification de la valeur null à l'aide de dapper.net

c# dapper sql-server

Question

J'utilise dapper pour lire des valeurs dans un objet que j'ai créé où je suis une procédure stockée de base.

IF EXISTS(SELECT LOWER(UT.UserID) FROM UserTable UT WHERE UT.UserID = @UserId)
BEGIN
    SELECT 
    UT.UserID,
    UT.Name, 
    UT.Surname, 
    UT.TrackingString
    FROM UserTable UT
    WHERE UT.UserID = @UserId
END

et c'est le code dans mon modèle de vue.

 IDbConnection connection;
        using (connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Liberty"].ToString()))
        {
            var result = connection.QueryMultiple("GetUserData", new { UserId = userId.ToLower() }, commandType: CommandType.StoredProcedure);
            user = result.Read<UserData>().First();

        }

Comment puis-je enregistrer le résultat si des colonnes ont été sélectionnées? Comme c'est le cas actuellement, je reçois une exception InvalidOperation s'il n'y a pas de données utilisateur (si l'utilisateur n'existe pas).

Réponse acceptée

Utilisez la méthode Linq correcte. Vous en utilisez un qui ne traite aucun résultat comme un résultat non valide, alors que votre requête peut ne renvoyer aucune valeur si aucun utilisateur n'existe.

Basculez vers une méthode qui ne lance aucun élément dans le retour enumerable, puis vérifiez la valeur null et gérez-la correctement.

    // snip
    user = result.Read<UserData>().FirstOrDefault();
}
if(user == null)
{
    // no such user exists, go do something about it

Réponse populaire

Pourquoi utilisez-vous QueryMultiple? Utilisez plutôt Query <>. Ensuite, faites simplement result.Count () avant result.first (). Ou bien FirstOrDefault ()

Puis-je également suggérer de créer une classe pour recevoir les données?

public class User
{
    public int UserID {get; set;}
....
}

Ensuite, utilisez connection.Query ("....", new ...)

Beaucoup plus agréable aux yeux.



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