Renvoi d'un seul paramètre dans le cadre d'une requête multi-mapping

c# dapper

Question

J'ai un scénario où je dois renvoyer une seule colonne dans le cadre d'une requête multi-cartes dans Dapper .

J'ai simplifié l'exemple ci-dessous mais essentiellement la valeur de colonne unique (l'int) que je veux récupérer n'est pas une propriété de la classe Post (mais est dans la table de base de données).

Je veux récupérer cette valeur elle-même, comme si vous l'utilisiez d'une manière similaire à la ligne suivante de l'exemple, où status est la valeur int en question:

post.SetSomeStatus(status);

Voici l'exemple de code:

  var sql = 
    @"select *, p.Status from #Posts p 
    left join #Users u on u.Id = p.OwnerId
    Order by p.Id";

    var data = connection.Query<Post, User, int, Post>(sql, (post, user, status) => { 
        post.Owner = user;
        post.SetSomeStatus(status);
        return post;
    });

    var post = data.First();

Je vois l'erreur suivante avec ce code: Index était en dehors des limites du tableau .

Réponse acceptée

La raison de l'erreur: L' index était en dehors des limites du tableau en raison de la façon dont Dapper divisait les segments de la réponse à la requête à allouer aux paramètres de retour Post, User & int dans cet exemple. La convention de Dapper consiste à diviser l'ID de champ ou à fournir vos propres règles pour diviser l'ensemble de résultats à l'aide du paramètre splitOn .

Pour que l'exemple ci-dessus fonctionne:

  var sql = 
    @"select *, p.Status AS ID from #Posts p 
    left join #Users u on u.Id = p.OwnerId
    Order by p.Id";

    var data = connection.Query<Post, User, int, Post>(sql, (post, user, status) => { 
        post.Owner = user;
        post.SetSomeStatus(status);
        return post;
    });

    var post = data.First();

J'ai trouvé une autre question qui m'a également aidé: Utilisation correcte du Multimapping dans Dapper




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