Entity Framework - Prise en charge d'énumération

Dans Entity Framework, cette fonctionnalité vous permettra de définir une propriété sur une classe de domaine qui est un type enum et de la mapper à une colonne de base de données de type entier. Entity Framework convertira ensuite la valeur de la base de données vers et à partir de l'énumération appropriée au fur et à mesure qu'il interroge et enregistre les données.

  • Les types énumérés présentent toutes sortes d'avantages lorsque vous travaillez avec des propriétés qui ont un nombre fixe de réponses.

  • La sécurité et la fiabilité d'une application augmentent toutes deux lorsque vous utilisez des énumérations.

  • L'énumération rend beaucoup plus difficile pour l'utilisateur de faire des erreurs, et les problèmes tels que les attaques par injection sont inexistants.

  • Dans Entity Framework, une énumération peut avoir les types sous-jacents suivants -

    • Byte
    • Int16
    • Int32
    • Int64
    • SByte
  • Le type sous-jacent par défaut des éléments d'énumération est int.

  • Par défaut, le premier énumérateur a la valeur 0 et la valeur de chaque énumérateur successif est augmentée de 1.

Jetons un coup d'œil à l'exemple suivant dans lequel nous allons créer une entité dans Designer, puis ajouter des propriétés.

Step 1 - Créer un nouveau projet à partir de l'option de menu Fichier → Nouveau → Projet.

Step 2 - Dans le volet gauche, sélectionnez l'application console.

Step 3 - Entrez EFEnumDemo comme nom du projet et cliquez sur OK.

Step 4 - Cliquez avec le bouton droit sur le nom du projet dans l'Explorateur de solutions et sélectionnez l'option de menu Ajouter → Nouvel élément.

Step 5 - Sélectionnez ADO.NET Entity Data Model dans le volet Modèles.

Step 6 - Entrez EFEnumModel.edmx comme nom de fichier, puis cliquez sur Ajouter.

Step 7 - Sur la page Assistant de modèle de données d'entité, sélectionnez Modèle de concepteur EF vide.

Step 8 - Cliquez sur Terminer

Step 9 - Cliquez ensuite avec le bouton droit de la souris sur la fenêtre du concepteur et sélectionnez Ajouter → Entité.

La boîte de dialogue Nouvelle entité apparaît comme illustré dans l'image suivante.

Step 10 - Entrez Department comme nom d'entité et DeptID comme nom de propriété, laissez le type de propriété Int32 et cliquez sur OK.

Step 11 - Faites un clic droit sur l'entité et sélectionnez Ajouter nouveau → Propriété scalaire.

Step 12 - Renommez la nouvelle propriété en DeptName.

Step 13 - Changez le type de la nouvelle propriété en Int32 (par défaut, la nouvelle propriété est de type String).

Step 14 - Pour modifier le type, ouvrez la fenêtre Propriétés et remplacez la propriété Type par Int32.

Step 15 - Dans Entity Framework Designer, cliquez avec le bouton droit sur la propriété Name, sélectionnez Convertir en énumération.

Step 16 - Dans la boîte de dialogue Ajouter un type d'énumération, entrez DepartmentNames comme nom de type d'énumération, modifiez le type sous-jacent en Int32, puis ajoutez les membres suivants au type: Physique, Chimie, Informatique et Économie.

Step 17 - Cliquez sur Ok.

Si vous passez à la fenêtre Navigateur de modèles, vous verrez que le type a également été ajouté au nœud Types d'énumération.

Générons une base de données à partir du modèle en suivant toutes les étapes mentionnées dans le chapitre sur l'approche Model First.

Step 1 - Cliquez avec le bouton droit sur la surface du Concepteur d'entités et sélectionnez Générer la base de données à partir du modèle.

La boîte de dialogue Choisissez votre connexion de données de l'assistant de génération de base de données s'affiche.

Step 2 - Cliquez sur le bouton Nouvelle connexion.

Step 3 - Entrez le nom du serveur et EnumDemo pour la base de données et cliquez sur OK.

Step 4 - Une boîte de dialogue vous demandant si vous souhaitez créer une nouvelle base de données apparaîtra, cliquez sur Oui.

Step 5- Cliquez sur Suivant et l'assistant de création de base de données génère un langage de définition de données (DDL) pour créer une base de données. Cliquez maintenant sur Terminer.

Step 6 - Cliquez avec le bouton droit sur l'éditeur T-SQL et sélectionnez Exécuter.

Step 7 - Pour afficher le schéma généré, cliquez avec le bouton droit sur le nom de la base de données dans l'Explorateur d'objets SQL Server et sélectionnez Actualiser.

Vous verrez le tableau Départements dans la base de données.

Jetons un coup d'œil à l'exemple suivant dans lequel de nouveaux objets Department au contexte sont ajoutés et enregistrés. Et puis récupérez le département informatique.

class Program {

   static void Main(string[] args) {

      using (var context = new EFEnumModelContainer()) {

         context.Departments.Add(new Department { DeptName = DepartmentNames.Physics});
         context.Departments.Add(new Department { DeptName = DepartmentNames.Computer});
         context.Departments.Add(new Department { DeptName = DepartmentNames.Chemistry});
         context.Departments.Add(new Department { DeptName = DepartmentNames.Economics});

         context.SaveChanges();

         var department = (
            from d in context.Departments
            where d.DeptName == DepartmentNames.Computer
            select d
         ).FirstOrDefault();

         Console.WriteLine(
            "Department ID: {0}, Department Name: {1}", 
               department.DeptID, department.DeptName
         );

         Console.ReadKey();
      }
   }
}

Lorsque le code ci-dessus est exécuté, vous recevrez la sortie suivante -

Department ID: 2, Department Name: Computer

Nous vous recommandons d'exécuter l'exemple ci-dessus étape par étape pour une meilleure compréhension.