2009-01-06 14 views
7

tengo un procedimiento almacenado que utiliza parámetros de salida como esta:Perdido precisión decimal y la escala utilizando LINQ y el procedimiento almacenado con parámetros de salida

ALTER PROCEDURE [GetAmount] 
( 
@orderID [int], 
@totalcost decimal(18,2) OUTPUT 
) 
SELECT @totalcost = cost 
FROM mytable 
WHERE orderID = @orderID 

Cuando arrastrar el procedimiento almacenado en el diseñador, el código resultante en el designer.cs archivo termina por perder la precisión y escala, como esto:

[Parameter(DbType="Decimal")] ref System.Nullable<decimal> totalcost 

este es un problema, porque cosas como precios de los productos y los totales del pedido se redondean hacia arriba (es decir, se convierte en 19,95 20).

Ahora, puedo corregir manualmente el archivo .cs, pero tendría que recordar hacerlo cada vez que se realiza una actualización. ¿Estoy haciendo algo mal? ¿Hay alguna forma de cambiar mi procedimiento almacenado que permita a LINQ detectar automáticamente la precisión y la escala?

Respuesta

2

¿Se puede usar el tipo de moneda en lugar del tipo decial (18,2)?

+0

Interesante - el dinero HACE el trabajo. ¿Alguna idea de por qué? – Ethan

+0

Realmente no sé por qué el decimal no funciona bien. Debería jugar con eso un poco más. Lo siento. –

3

puedo corregir manualmente el archivo .cs, pero

derecho, tiene que mover este código en un archivo de clase parcial, editar la precisión del mapeo allí, y soltar el procedimiento almacenado del diseñador .

Esto le proporciona una especificación manual en el código de la asignación del procedimiento almacenado.

+0

GENIO !!! Desearía haber pensado en hacer eso hace siglos. – BG100

Cuestiones relacionadas