todecimal round redondear places formato decimals decimales convert c# sql entity-framework entity-framework-6

c# - round - Marco de entidad que agrega un lugar decimal a un campo de tipo decimal(10,0)



math.round c# (2)

Estoy usando la base de datos EF primero. En mi base de datos tengo un campo que sé que siempre tendrá 10 dígitos, así que naturalmente he optado por un tipo decimal(10,0) , cuando inserto valores en la tabla, puedo insertar cualquier número de hasta 10 dígitos. Sin embargo, cuando inserto una entidad con EF6, agrega 0 decimal y luego arroja un parámetro fuera del rango de valor. El tipo de campo en mi código C # es decimal

Aquí está la entidad inmediatamente antes de llamar a context.SaveChanges() :

Y un control de cordura, aquí está la columna en el servidor sql:

EDITAR :

Aquí está el mapeo EF:

Acabo de informarlo en Codeplex .


El error suena como un error en EF, pero si siempre es un número entero, ¿no tendría más sentido usar un int en lugar de un decimal? Estoy pensando en ambos por motivos lógicos y de rendimiento.


Esto es realmente un error en SqlClient - El código SqlDecimal no maneja la precisión correctamente para algunos casos extremos.

Creo que el culpable está aquí: http://referencesource.microsoft.com/#System.Data/data/System/Data/SQLTypes/SQLDecimal.cs#416

Sin embargo, dado que este ha sido el comportamiento durante mucho tiempo, es muy poco probable que alguna vez se solucione. Recomiendo trabajar con esto usando bigint, como lo han sugerido user1648371 y Andrew Morton.