El valor no es un objeto convertible

dapper

Pregunta

Tengo una consulta simple y Poco que estoy usando con Dapper como esta:

var jc = this.dbConnection.ExecuteScalar<JcUser>("SELECT loginid as Username,Password,coalesce(CustomerId,0) as CustomerId,TextProfileId,UxProfileId from \"user\" where id = @id", new {id = id});

Poco:

public class JcUser
{

    public string UserName { get; set; }

    public string Password { get; set; }

    public int CustomerId{ get; set; }

    public int TextProfileId { get; set; }

    public int UxProfileId { get; set; }
}

Cuando esto se ejecuta arroja una excepción con el mensaje

Value is not a convertible object: System.String to JcUser

El seguimiento de la pila termina en: at System.Convert.ToType (System.Object value, System.Type conversionType, IFormatProvider provider, Boolean try_target_to_type)

¿Alguna idea de por qué está haciendo esto?

Gracias

ACTUALIZACIÓN : Usando var jc = this.dbConnection.Query<JcUser>("SELECT loginid as Username,Password,coalesce(CustomerId,0) as CustomerId,TextProfileId,UxProfileId from \"user\" where id = @id", new {id = id}).First(); parece funcionar También me doy cuenta de que soy un idiota y ExecuteScalar es solo por un valor. Sin embargo, ¿mi actualización es la mejor manera de recuperar solo una fila?

Respuesta aceptada

ExecuteScalar asigna al método ADO.NET del mismo nombre. Devuelve como máximo una celda: una cuadrícula, una fila, una columna. Como tal, no está diseñado para su uso con objetos complejos, y no puede funcionar correctamente en su caso, ya que tiene varias columnas.

Dapper supone que solo usaría eso con tipos simples como int , string , etc.

En tu caso, usa:

var jc = this.dbConnection.Query<JcUser>(
     sql, args).SingleOrDefault();

Si desea evitar una asignación de List<> oculta, también puede pasar el buffered: false .



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué