La valeur n'est pas un objet convertible

dapper

Question

J'ai une simple requête et Poco que j'utilise avec Dapper comme ceci:

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

Quand il s'exécute, il lance une exception avec le message

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

La trace de la pile se termine par: at System.Convert.ToType (System.Object value, System.Type conversionType, IFormatProvider provider, Boolean try_target_to_type)

Des idées pourquoi ça marche?

Merci

MISE À JOUR : Utilisation de 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(); semble fonctionner. Je réalise aussi que je suis un crétin et ExecuteScalar est seulement pour une valeur. Cependant, ma mise à jour est-elle la meilleure façon de récupérer une seule ligne?

Réponse acceptée

ExecuteScalar mappe à la méthode ADO.NET du même nom. Il renvoie au maximum une cellule: une grille, une ligne, une colonne. En tant que tel, il n'est pas conçu pour être utilisé avec des objets complexes et ne peut pas fonctionner correctement dans votre cas, car vous avez plusieurs colonnes.

Dapper suppose que vous utiliseriez uniquement des types simples comme int , string etc.

Dans votre cas, utilisez:

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

Si vous voulez éviter une affectation de List<> cachée, vous pouvez également passer le buffered: false .



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