2011-03-09 14 views
7

Todo,NHibernate 3.0 que redondea un decimal a 5 decimales, ¿por qué?

Estábamos usando NHiberate 2.1 donde almacenamos valores decimales (tipos de cambio) p. Ej. 123.1234567 a 7 cifras decimales

Estamos mapeo del tipo que utiliza el estilo asignación predeterminada:

<property name="ExchangeRate" not-null="true" /> 

Sin embargo, cuando pasaron a NHibernate 3.0 el valor anterior se guarda como 123.1234500.

No especifica este cambio de comportamiento en las notas de la versión 3.0 aunque sí parece al detalle que en la edición [NH-1594], el valor por defecto para decimal es decimal (19,5)

Tenemos una solución es decir, especifique la siguiente asignación:

<property name="ExchangeRate" type="decimal(10,7) not-null="true" /> 

¿Debo saber si esta solución es la forma correcta de resolver este problema? Además, ¿por qué hay un cambio funcional en el comportamiento con el redondeo entre 2.1 y 3.0?

Saludos,

Billy Pila

+0

¿Está seguro de que no se debe al diseño de la base de datos? ¿Estás usando el mismo esquema de base de datos al intentar 3.0? – jishi

+0

Lo siento, debería haber sido type = "decimal (14,7) – bstack

+0

Sí, exactamente el mismo diseño de base de datos. Si vuelvo a la versión anterior de NHibernate, el problema no existe. – bstack

Respuesta

9

que funciona, pero esto es más limpio de la OMI:

<property name="ExchangeRate" precision="10" scale="7" /> 

Un decimal no nulo está implícito en el tipo de propiedad.

+0

Preferiría que fuera la otra forma de estar Honesto. Gracias por la sugerencia sin embargo. – bstack

+0

Mi pregunta sin embargo es por qué se redondea a 5 decimales por defecto en NH 3, mientras que no lo hizo en NH2.1 ... – bstack

+2

@bstack ese es el tipo de pregunta que puede preguntar en la lista de desarrollo de nhibernate. De todos modos, los tipos numéricos exactos deben ser deterministas, por lo que es mejor ser explícito que confiar en un valor predeterminado no documentado. –

Cuestiones relacionadas