Dapper pasando param dinámico

c# dapper orm

Pregunta

Actualmente estoy en el proceso de escribir un contenedor para Dapper. Este contenedor obliga a cada consulta a ser un procedimiento almacenado.

En mi envoltorio, llamo a Dapper como tal (con el problema):

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

Cuando intento pasar "param" a la consulta, me dice "No puedo resolver la consulta de símbolo". Cuando elimino el pase param, funciona bien.

¿Puede alguien señalarme en la dirección correcta para poder pasar parámetros dinámicos (o algo parecido) a Dapper?

Respuesta aceptada

Solo necesita cambiar el parámetro para escribir el objeto y cuando lo llame puede usar un tipo anónimo para pasar sus parámetros.

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

Entonces lo llamarías así:

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

Respuesta experta

Probablemente puedas descartarlo:

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

Estoy dudando de la sabiduría de esa dynamic ; Sé que había una razón, pero sospecho que causa más daño que bien. Francamente, dapper funcionaría bien con object (la "razón" era un problema IDE, no un problema de lenguaje).



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