Rango .NET Dapper

c# dapper orm

Pregunta

Recientemente he estado ejecutando la biblioteca de extensiones Dapper para mi API. el siguiente código devuelve una lista de usuarios con sus direcciones resptive basadas en una única identificación de usuario:

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

esto funciona perfectamente, pero cuando intento utilizar el mismo conjunto de detalles, pero sin el ID de usuario como parámetro (debería devolver a todos los usuarios sus respectivos permisos), aparece un error relacionado con la adición del rango.

System.Collections.Generic.List 'no contiene una definición para' UserPermissions 'y no se pudo encontrar ningún método de extensión' UserPermissions 'que aceptara un primer argumento de tipo' System.Collections.Generic.List '(¿falta una directiva using o una referencia de montaje?)

El método para devolver todo es:

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 clase de Usuario es:

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

Respuesta aceptada

El error se debe a que está intentando acceder al objeto Permissions en un objeto List<User> , que no existe ni como propiedad ni como método de extensiones.

En su primer ejemplo, el usuario variable es del tipo User , usted devuelve un único objeto User utilizando el método 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
...

Mientras que en su segundo ejemplo, el usuario variable es de tipo List<User> , usted devuelve una lista de objetos User ( List<User> ) utilizando el método 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>
...


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow