Gamme .NET Dapper

c# dapper orm

Question

J'ai récemment parcouru la bibliothèque d'extension Dapper pour mon API. le code suivant renvoie une liste d'utilisateurs avec leurs adresses de distribution basées sur un identifiant d'utilisateur unique:

 public User GetUserBicProfiles(string userId)
    {

        using (
            var multipleResults = this.db.QueryMultiple("sp_UserPermisisons", new {userId = 
           userId},commandType: CommandType.StoredProcedure))
         {
            var user = multipleResults.Read<User>().SingleOrDefault();

            var permissions= multipleResults.Read<Permissions>().ToList();

            if (user != null&& permissions != null)
            {
               user.Permissions.AddRange(permissions);
            }

            return user;
        }
    }

Cela fonctionne parfaitement, mais lorsque j'essaie d'utiliser le même ensemble de détails, mais sans le paramètre userId en tant que paramètre (devrait renvoyer tous les utilisateurs avec leurs autorisations respectives), je reçois une erreur concernant l'ajout de la plage.

System.Collections.Generic.List 'ne contient pas de définition pour' UserPermissions 'et aucune méthode d'extension' UserPermissions 'acceptant un premier argument de type' System.Collections.Generic.List 'ne peut être trouvée (vous manque une directive using ou une référence d'assemblage?)

La méthode pour tout retourner est la suivante:

public List<User> GetUsers()
    {
        using (var multipleResults = this.db.QueryMultiple("sp_UserPermissions",commandType: CommandType.StoredProcedure))
        {
            var user = multipleResults.Read<User>().ToList();

            var permissions = multipleResults.Read<Permissions>().ToList();

            if (user != null && permissions != null)
            {

                user.Permissions.AddRange(permissions);
            }

            return user;
        }
    }

la classe User est:

public class User
{
    public User()
    {
        this.Permissions = new List<Permissions>();
    }
    public string UserId { get; set; }
    public string UserName { get; set; }
    public string ApplicationName { get; set; }
    public string Email { get; set; }
    public string Comment { get; set; }
    public string Password { get; set; }
    public string PasswordQuestion { get; set; }
    public string PasswordAnswer { get; set; }
    public bool? IsApproved { get; set; }
    public DateTime LastActivityDate { get; set; }
    public DateTime LastLoginDate { get; set; }
    public DateTime LastPasswordChangeDate { get; set; }
    public DateTime CreationDate { get; set; }
    public bool? IsOnline { get; set; }
    public bool? IsLockedOut { get; set; }
    public DateTime LastLockedOutDate { get; set; }
    public bool? FailedPasswordAttempCount { get; set; }
    public DateTime FailedPasswordAttemptWithStart { get; set; }
    public bool? FailedPasswordAnswerAttemptCount { get; set; }
    public DateTime FailedPasswordAnsdwerAttemptWindowStart { get; set; }


    public List<Permissions> Permissions { get; set; } 
}

Réponse acceptée

L'erreur est due au fait que vous essayez d'accéder à l'objet Permissions sur un objet List<User> , qui n'existe pas en tant que propriété ou méthode d'extensions.

Dans votre premier exemple, la variable user est du type User , vous retournez un seul objet User en utilisant la méthode SingleOrDefault() .

...
var user = multipleResults.Read<User>().SingleOrDefault();

var permissions= multipleResults.Read<Permissions>().ToList();
if (user != null&& permissions != null)
{
  user.Permissions.AddRange(permissions);
}

return user; // --> user type is User
...

Alors que dans votre deuxième exemple, la variable user est de type List<User> , vous retournez une liste d'objets User ( List<User> ) à l'aide de la méthode ToList() .

...
var user = multipleResults.Read<User>().ToList();
var permissions = multipleResults.Read<Permissions>().ToList();

if (user != null && permissions != null)
{
  user.Permissions.AddRange(permissions);
}

return user; // --> user type is List<User>
...


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