Los parámetros de salida decimales de Dapper.net no devuelven el valor de precisión

.net c# dapper sql

Pregunta

Estoy usando Dapper desde hace algún tiempo y es un excelente mapeador de ORM. pero recientemente encontré que un problema con los decimales pasados como un parámetro de Salida para los procedimientos almacenados cortaría la precisión y solo devolvería el número entero.

var dynamicParam = new DynmaicParam();

dynamicParam.Add("decimalOut",11.25,dbtype.decimal,ParameterDirection.OutPut);
connection.execute("sp1",dynamicParam,commandType.StoredProcedures);    
decimal val = dynamicParam.Get<decimal>("decimalOut");

en este caso, val será 11 y no devuelve 11.25 como se indica cuando el procedimiento simplemente devuelve el parámetro de salida exacto a medida que se pasó.

Hemos utilizado una solución de trabajo como la siguiente donde devuelve la precisión,

var dynamicParam = new DynmaicParam();
dynamicParam.Add("decimalOut",11.25,dbtype.double,ParameterDirection.OutPut);
connection.execute("sp1",dynamicParam,commandType.StoredProcedures);    
decimal val = dynamicParam.Get<dynamic>("decimalOut");

pero sigo pensando que debe haber una mejor manera de manejar este problema de precisión decimal de Dapper dado que es un asombroso mapeador de ORM donde admite muchos tipos de datos. Apreciar un mejor trabajo alrededor y gracias de antemano

Respuesta popular

Necesitas usar precisión y escala.

Ejemplo:

dynamicParam.Add("decimalOut",11.25,dbtype.decimal,ParameterDirection.OutPut, precision: 18, scale: 2);


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué