Tutoriel : Améliorer la validation des données pour EF Database First avec ASP.NET application MVC
À l’aide de MVC, Entity Framework et ASP.NET la structure Scaffolding, vous pouvez créer une application web qui fournit une interface à une base de données existante. Cette série de tutoriels vous montre comment générer automatiquement du code qui permet aux utilisateurs d’afficher, de modifier, de créer et de supprimer des données qui résident dans une table de base de données. Le code généré correspond aux colonnes de la table de base de données.
Ce tutoriel se concentre sur l’ajout d’annotations de données au modèle de données pour spécifier les exigences de validation et la mise en forme d’affichage. Il a été amélioré en fonction des commentaires des utilisateurs dans la section commentaires.
Dans ce tutoriel, vous allez :
- Ajouter des annotations de données
- Ajouter des classes de métadonnées
Prérequis
Ajouter des annotations de données
Comme vous l’avez vu dans une rubrique précédente, certaines règles de validation des données sont automatiquement appliquées à l’entrée utilisateur. Par exemple, vous pouvez uniquement fournir un nombre pour la propriété Grade. Pour spécifier d’autres règles de validation des données, vous pouvez ajouter des annotations de données à votre classe de modèle. Ces annotations sont appliquées dans votre application web pour la propriété spécifiée. Vous pouvez également appliquer des attributs de mise en forme qui modifient la façon dont les propriétés sont affichées ; par exemple, la modification de la valeur utilisée pour les étiquettes de texte.
Dans ce tutoriel, vous allez ajouter des annotations de données pour limiter la longueur des valeurs fournies pour les propriétés FirstName, LastName et MiddleName. Dans la base de données, ces valeurs sont limitées à 50 caractères ; toutefois, dans votre application web, cette limite de caractères n’est actuellement pas appliquée. Si un utilisateur fournit plus de 50 caractères pour l’une de ces valeurs, la page se bloque lors de la tentative d’enregistrement de la valeur dans la base de données. Vous allez également limiter la valeur Grade aux valeurs comprises entre 0 et 4.
Sélectionnez Modèles>ContosoModel.edmx>ContosoModel.tt et ouvrez le fichier Student.cs . Ajoutez le code en surbrillance suivant à la classe .
namespace ContosoSite.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public partial class Student
{
public Student()
{
this.Enrollments = new HashSet<Enrollment>();
}
public int StudentID { get; set; }
[StringLength(50)]
public string LastName { get; set; }
[StringLength(50)]
public string FirstName { get; set; }
public Nullable<System.DateTime> EnrollmentDate { get; set; }
[StringLength(50)]
public string MiddleName { get; set; }
public virtual ICollection<Enrollment> Enrollments { get; set; }
}
}
Ouvrez Enrollment.cs et ajoutez le code en surbrillance suivant.
namespace ContosoSite.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public partial class Enrollment
{
public int EnrollmentID { get; set; }
[Range(0, 4)]
public Nullable<decimal> Grade { get; set; }
public int CourseID { get; set; }
public int StudentID { get; set; }
public virtual Course Course { get; set; }
public virtual Student Student { get; set; }
}
}
Générez la solution.
Cliquez sur Liste des étudiants , puis sélectionnez Modifier. Si vous tentez d’entrer plus de 50 caractères, un message d’erreur s’affiche.
Retour à la page d’accueil. Cliquez sur Liste des inscriptions , puis sélectionnez Modifier. Essayez de fournir une note supérieure à 4. Vous recevrez cette erreur : le champ Grade doit être compris entre 0 et 4.
Ajouter des classes de métadonnées
L’ajout des attributs de validation directement à la classe de modèle fonctionne lorsque vous ne vous attendez pas à ce que la base de données change ; Toutefois, si votre base de données change et que vous devez régénérer la classe de modèle, vous perdrez tous les attributs que vous avez appliqués à la classe de modèle. Cette approche peut être très inefficace et susceptible de perdre des règles de validation importantes.
Pour éviter ce problème, vous pouvez ajouter une classe de métadonnées qui contient les attributs. Lorsque vous associez la classe de modèle à la classe de métadonnées, ces attributs sont appliqués au modèle. Dans cette approche, la classe de modèle peut être régénérée sans perdre tous les attributs qui ont été appliqués à la classe de métadonnées.
Dans le dossier Modèles , ajoutez une classe nommée Metadata.cs.
Remplacez le code dans Metadata.cs par le code suivant.
using System;
using System.ComponentModel.DataAnnotations;
namespace ContosoSite.Models
{
public class StudentMetadata
{
[StringLength(50)]
[Display(Name="Last Name")]
public string LastName;
[StringLength(50)]
[Display(Name="First Name")]
public string FirstName;
[StringLength(50)]
[Display(Name="Middle Name")]
public string MiddleName;
[Display(Name = "Enrollment Date")]
public Nullable<System.DateTime> EnrollmentDate;
}
public class EnrollmentMetadata
{
[Range(0, 4)]
public Nullable<decimal> Grade;
}
}
Ces classes de métadonnées contiennent tous les attributs de validation que vous avez précédemment appliqués aux classes de modèle. L’attribut Display est utilisé pour modifier la valeur utilisée pour les étiquettes de texte.
Maintenant, vous devez associer les classes de modèle aux classes de métadonnées.
Dans le dossier Models , ajoutez une classe nommée PartialClasses.cs.
Remplacez le contenu du fichier par le code suivant.
using System;
using System.ComponentModel.DataAnnotations;
namespace ContosoSite.Models
{
[MetadataType(typeof(StudentMetadata))]
public partial class Student
{
}
[MetadataType(typeof(EnrollmentMetadata))]
public partial class Enrollment
{
}
}
Notez que chaque classe est marquée en tant que partial
classe et que chacune correspond au nom et à l’espace de noms en tant que classe générée automatiquement. En appliquant l’attribut de métadonnées à la classe partielle, vous vous assurez que les attributs de validation des données seront appliqués à la classe générée automatiquement. Ces attributs ne seront pas perdus lorsque vous régénérez les classes de modèle, car l’attribut de métadonnées est appliqué dans des classes partielles qui ne sont pas régénérées.
Pour régénérer les classes générées automatiquement, ouvrez le fichier ContosoModel.edmx . Une fois de plus, cliquez avec le bouton droit sur l’aire de conception et sélectionnez Mettre à jour le modèle à partir de la base de données. Même si vous n’avez pas modifié la base de données, ce processus régénère les classes. Sous l’onglet Actualiser , sélectionnez Tables et Terminer.
Enregistrez le fichier ContosoModel.edmx pour appliquer les modifications.
Ouvrez le fichier Student.cs ou le fichier Enrollment.cs et notez que les attributs de validation de données que vous avez appliqués précédemment ne se trouvent plus dans le fichier. Toutefois, exécutez l’application et notez que les règles de validation sont toujours appliquées lorsque vous entrez des données.
Conclusion
Cette série a fourni un exemple simple de la façon de générer du code à partir d’une base de données existante qui permet aux utilisateurs de modifier, mettre à jour, créer et supprimer des données. Il a utilisé ASP.NET MVC 5, Entity Framework et ASP.NET structure pour créer le projet.
Pour obtenir un exemple d’introduction au développement Code First, consultez Prise en main avec ASP.NET MVC 5.
Pour obtenir un exemple plus avancé, consultez Création d’un modèle de données Entity Framework pour une application MVC 4 ASP.NET. Notez que l’API DbContext que vous utilisez pour utiliser des données dans Database First est identique à l’API que vous utilisez pour utiliser des données dans Code First. Même si vous envisagez d’utiliser Database First, vous pouvez apprendre à gérer des scénarios plus complexes tels que la lecture et la mise à jour des données associées, la gestion des conflits d’accès concurrentiel, etc. à partir d’un didacticiel Code First. La seule différence réside dans la façon dont la base de données, la classe de contexte et les classes d’entité sont créées.
Ressources supplémentaires
Pour obtenir la liste complète des annotations de validation des données que vous pouvez appliquer aux propriétés et aux classes, consultez System.ComponentModel.DataAnnotations.
Étapes suivantes
Dans ce tutoriel, vous allez :
- Annotations de données ajoutées
- Classes de métadonnées ajoutées
Pour savoir comment déployer une application web et une base de données SQL sur Azure App Service, consultez ce tutoriel :