Résoudre Tous Les Problèmes De Windows Et Autres Programmes

Travailler avec une précision décimale dans .NET avec MSSQL Server et Entity Framework

Cela semble être une chose élémentaire, mais traiter des nombres au-delà des entiers entiers dans le logiciel est délicat. Les différences entre l'arrondi dans le code et l'arrondi dans le stockage de la base de données peuvent vous surprendre si vous n'y prêtez pas attention. Ajoutez une couche d'abstraction comme le .NET Entity Framework et il peut être facile de faire une erreur. Si vous utilisez un code d'abord approche au développement avec Entity Framework, il est encore plus probable que vous fassiez une erreur avec une précision décimale.

Le problème, en particulier avec le code en premier, est que les valeurs de précision et d'échelle par défaut ne sont généralement pas assez précises pour la plupart des situations. Lorsque vous définissez une colonne dans le serveur MS SQL comme décimale ou numérique (ce sont les deux options mais font la même chose), vous devez définir une précision et une valeur d'échelle fixes pour cette colonne. La précision est le nombre total de chiffres, comprenant décimales, que vous souhaitez stocker. L'échelle est le nombre de chiffres de la précision que vous souhaitez utiliser pour les décimales. Cette distinction selon laquelle la précision inclut les décimales est importante car les gens ont tendance à l'oublier fréquemment.



choses sympas à faire avec un téléphone Android

Exemple:



CREATE TABLE dbo.MyTable ( MyDecimalColumn decimal(5,2) )

La colonne MyDecimalColumn est définie avec un type de données décimal, une précision de 5 et une échelle de 2. Cela signifie que la colonne stockera un maximum de 5 chiffres, dont 2 seront toujours après la virgule - par ex. 103.27

Lorsque vous utilisez la première approche de développement du code, vous définissez votre modèle dans le code et attribuez à votre propriété un type de décimale.



public decimal myDecimalProperty {get; set;}

quelle est la difference entre ios et android

Lorsque vous appliquez ce modèle de code à la base de données pour créer la table la précision et l'échelle par défaut seront utilisées qui sont décimales (18,2) et vous ne vous en rendez peut-être pas compte. Ensuite, au fur et à mesure que vous coderez votre application, vous obtenez une valeur dans votre myDecimalProperty de quelque chose comme 678.0274 que vous souhaitez conserver dans la base de données. Lorsque vous enregistrez cette valeur, votre précision sera perdue et au lieu de stocker la décimale complète, la décimale arrondie sera stockée à la place, 678.03.

Malheureusement, en utilisant d'abord le code, il n'existe aucun moyen prêt à l'emploi de spécifier une précision décimale sur votre propriété à l'aide de décorateurs. Au lieu de cela, vous devez définir la précision dans votre générateur de modèles, ce qui est bien, mais cela éloigne la définition de la propriété où elle est plus difficile à remarquer. Une solution alternative que nous utilisons sur nos premiers projets de code est de définir un décorateur de propriété personnalisé qui peut être utilisé pour définir la précision des types décimaux. Ensuite, vous enregistrez le filtre de précision une fois dans votre modéliste et c'est bon. Voici à quoi ressemble cette classe :



Et voici comment l'utiliser .

Une fois que vous saurez y faire attention, vous commencerez tous vos projets avec la précision des types décimaux à l'esprit, mais je suppose que la précision par défaut a attrapé tout le monde à un moment ou à un autre.

Cette histoire, 'Travailler avec une précision décimale dans .NET avec MSSQL Server et Entity Framework' a été initialement publiée parITworld.