Dapper: ¿puedo usar parámetros para cualquier cosa?

dapper npgsql parameter-passing

Pregunta

Estoy escribiendo un código que preparará mi base de datos para mi aplicación. En el código hay algunas sentencias SQL repetitivas cuando estoy creando una tabla, y quiero ocultarlas en algunos métodos (por ahora, solo hay dos: crear la clave principal y hacer que el ID de la tabla se incremente automáticamente en postgres). Para el caso simple de la clave primaria, primero escribí una función como esta:

public void MakePrimaryKey(DbConnection conn, string tblName, string colName)
{
    conn.Execute(@"
ALTER TABLE ""@tblName""
    ADD CONSTRAINT ""@constrName"" PRIMARY KEY(""@colName"")
    ", new { tblName = tblName,
             constrName = tblName + "_pkey",
             colName = colName } );
}

Después de mucho juguetear con errores y excepciones, finalmente llegué a la conclusión de que el uso de parámetros de esta manera no es realmente compatible, así que string.Format() a una string.Format() tradicional. string.Format() llamada, y todo estaba bien.

Pero no estoy realmente satisfecho. ¿Esta forma de usar parámetros realmente no es compatible? Si es así, ¿cuáles son los lugares donde puedo usar estos parámetros de forma segura? ¿Solo para las partes variables de la consulta SQL, como los lugares donde puedo usar los parámetros de un procedimiento almacenado?

Respuesta aceptada

Si mal no recuerdo, Dapper usa un IDbCommand parametrizado para ejecutar sus consultas.

Las consultas parametrizadas son simplemente operaciones de reemplazo de cadenas.

Para ser más específico, una consulta parametrizada le permite tener parámetros en su consulta, envía los valores para esos parámetros y luego SQL Server maneja compilar las consultas y pasar los valores para los parámetros.

Si no puede crear una consulta parametrizada con ADO.NET simple utilizando la sintaxis deseada, Dapper.NET tampoco podrá hacerlo por usted.



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