Meilleure annotation de Données pour un nombre Décimal(18,2)
J'ai une colonne à l'intérieur de mon sql server 2008 avec le type de Decimal(18,2)
. Mais sur entity framework quelle est la meilleure annotation de données de validation que je peux appliquer à cette propriété, à l'intérieur de mon asp.net application web MVC ?
- Voulez-vous dire, pour limiter à 2 décimales?
- oui , de sorte qu'aucune exception sera levée sur la base de données !!
- répondu correctement ci-dessous, vous devez accepter.
Vous devez vous connecter pour publier un commentaire.
N'est pas explicite annotation de données pour un nombre décimal, donc vous devez utiliser deux séparés d'ajouter des contraintes.
Deux Points Décimaux
Cette expression régulière assurez-vous que la propriété a plus de deux décimales.
Max 18 chiffres
En supposant que vous n'acceptez pas les nombres négatifs. Sinon, remplacer
0
avec-9999999999999999.99
.Résultat
Je pense que @jumpingcode de réponse peuvent être combinés dans un
RegularExpressionAttribute
.Ceci peut être utilisé pour n'importe quel
precision
etscale
. Le 16 est remplacé parprecision
-scale
et le 2 est remplacé par lescale
. L'expression régulière doit correspondre à des numéros saisis comme###
,0.##
,.##
,0
, et###.##
ainsi que des valeurs négatives.Ce qui semble être la réponse correcte ( les réponses ci-dessus, soit limiter les nombres valides qui peuvent être insérés dans un type de données Décimal(18,2) ou provoquer des erreurs de compilation si vous les appliquez à votre code, veuillez confirmer par vous-même):
Deux contraintes:
Deux Points Décimaux
Max 18 chiffres
Pour une approche différente dont certains peuvent considérer que plus lisible, vous pouvez remplacer la OnModelCreating méthode de votre DbContext pour définir la précision, comme suit:
Avantage: fortement typé vs personnalisé expression régulière
Inconvénient: ne peut pas le voir sur la catégorie, juste un balayage
La suite de @Schmalls exemple (et le commentaire de re construction dans un attribut) j'ai créé un exemple de travail (utilise C# 6 de la chaîne d'interpolation):
Utilisation:
RegularExpressionAttribute
sous-classes ne seront pas automatiquement émettent de la validation côté client attributs. Pour ce faire, vous devez appelerDataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(PrecisionAndScaleAttribute),typeof(RegularExpressionAttributeAdapter));
Im en utilisant presque excplusively (b/c il est simple et fonctionne)
Puis si j'ai besoin de convertir en arrière à double-je ajouter une conversion
Si vous écrivez à la 'colonne' annotation, fonctionnera très bien