Dapper passant paramètre dynamique

c# dapper orm

Question

Je suis en train d'écrire un wrapper pour Dapper. Ce wrapper force chaque requête à être une procédure stockée.

Dans mon emballage, j'appelle Dapper comme ça (avec le problème):

public IEnumerable<T> Select<T>(string storedProcName, dynamic param) {
    IEnumerable<T> results;

    using(var connection = new SqlConnection(_connectionString) {
        results = connection.Query<T>(storedProcName, param, commandType: CommandType.StoredProcedure);
    }

    return results;
}

Lorsque j'essaie de passer "param" à la requête, il me dit "Impossible de résoudre la requête de symbole". Lorsque je supprime le passage de paramètre, cela fonctionne bien.

Quelqu'un peut-il me diriger dans la bonne direction pour que je puisse transmettre des paramètres dynamiques (ou quelque chose du genre) à Dapper?

Réponse acceptée

Il vous suffit de modifier le paramètre pour taper object et lorsque vous l’appelez, vous pouvez utiliser un type anonyme pour transmettre vos paramètres.

public IEnumerable<T> Select<T>(string storedProcName, object param) {
    IEnumerable<T> results;

    using(var connection = new SqlConnection(_connectionString) {
        results = connection.Query<T>(storedProcName, param, commandType: CommandType.StoredProcedure);
    }

    return results;
}

Alors tu appellerais ça comme ça:

var results = query.Select<Entity>("spname", new { Id = 2, Something = "test" });

Réponse d'expert

Vous pouvez probablement le jeter:

results = connection.Query<T>(storedProcName,
    (object)param, commandType: CommandType.StoredProcedure);

Je doute de la sagesse de cette dynamic ; Je sais qu'il y avait une raison, mais je soupçonne que cela cause plus de tort que de bien. Franchement, Dapper fonctionnerait bien avec object (la "raison" était un problème d'IDE, pas un problème de langue).




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