Prise en charge des énumérations - EF Designer
Remarque
EF5 et versions ultérieures uniquement : les fonctionnalités, API, etc. décrites dans cette page ont été introduites dans Entity Framework 5. Si vous utilisez une version antérieure, certaines ou toutes les informations ne s’appliquent pas.
Cette vidéo montre la procédure pas à pas pour utiliser les types d’énumération avec Entity Framework Designer. Elle décrit également comment utiliser des énumérations dans une requête LINQ.
Cette procédure pas à pas utilise Model First pour créer une base de données, mais vous pouvez également utiliser EF Designer avec le workflow Database First pour mapper à une base de données existante.
La prise en charge des énumérations a été introduite dans Entity Framework 5. Pour utiliser les nouvelles fonctionnalités telles que les énumérations, les types de données spatiales et les fonctions table, vous devez cibler .NET Framework 4.5. Visual Studio 2012 cible .NET 4.5 par défaut.
Dans Entity Framework, une énumération peut avoir les types sous-jacents suivants : Byte, Int16, Int32, Int64 ou SByte.
Regardez la vidéo
Cette vidéo montre comment utiliser les types d’énumération avec Entity Framework Designer. Elle décrit également comment utiliser des énumérations dans une requête LINQ.
Présentatrice : Julia Kornich
Conditions préalables
Vous devez installer Visual Studio 2012 Ultimate, Premium, Professional ou Express pour le web pour effectuer cette procédure pas à pas.
Configurer le projet
- Ouvrir Visual Studio 2012
- Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Projet.
- Dans le volet de gauche, cliquez sur Visual C#, puis sélectionnez le modèle Console.
- Entrez EnumEFDesigner comme nom du projet, puis cliquez sur OK.
Créer un modèle avec EF Designer
- Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le nom du projet, pointez sur Ajouter, puis cliquez sur Nouvel élément.
- Sélectionnez Données dans le menu de gauche, puis ADO.NET Entity Data Model dans le volet Modèles.
- Entrez EnumTestModel.edmx comme nom de fichier, puis cliquez sur Ajouter.
- Dans la page Assistant Entity Data Model, sélectionnez Modèle vide dans la boîte de dialogue Choisir le contenu du modèle.
- Cliquez sur Terminer
Le Concepteur d’entités, qui fournit une aire de conception permettant de modifier votre modèle, est affiché.
L'assistant exécute les actions suivantes :
- Génère le fichier EnumTestModel.edmx qui définit le modèle conceptuel, le modèle de stockage et le mappage entre eux. Définit la propriété de traitement des artefacts de métadonnées du fichier .edmx à incorporer dans l’assembly de sortie afin que les fichiers de métadonnées générés soient incorporés dans l’assembly.
- Ajoute une référence aux assemblys suivants : EntityFramework, System.ComponentModel.DataAnnotations et System.Data.Entity.
- Crée les fichiers EnumTestModel.tt et EnumTestModel.Context.tt et les ajoute sous le fichier .edmx. Ces fichiers de modèle T4 génèrent le code qui définit le type dérivé de DbContext et les types POCO mappés aux entités du modèle .edmx.
Ajouter un nouveau type d’entité
- Cliquez avec le bouton droit sur une zone vide de l’aire de conception, puis sélectionnez Ajouter -> Entité. La boîte de dialogue Nouvelle entité s’affiche.
- Spécifiez Department comme nom de type et DepartmentID comme nom de la propriété de clé. Conservez Int32 comme type.
- Cliquez sur OK.
- Cliquez avec le bouton droit sur l’entité, puis sélectionnez Ajouter nouveau -> Propriété scalaire.
- Renommez la nouvelle propriété Name.
- Remplacez le type de la nouvelle propriété par Int32 (par défaut, la nouvelle propriété est de type String). Pour modifier le type, ouvrez la fenêtre Propriétés et remplacez la propriété Type par Int32.
- Ajoutez une autre propriété scalaire et renommez-la Budget, puis remplacez le type par Décimal.
Ajouter un type d’énumération
Dans Entity Framework Designer, cliquez avec le bouton droit sur la propriété Name, puis sélectionnez Convertir en énumération.
Dans la boîte de dialogue Ajouter une énumération, tapez DepartmentNames comme nom du type d’énumération, remplacez le type sous-jacent par Int32, puis ajoutez les membres suivants au type : English, Math et Economics.
Appuyez sur OK.
Enregistrer le modèle et générer le projet
Remarque
Quand vous générez le projet, des avertissements sur les entités et les associations non mappées peuvent s’afficher dans la Liste d’erreurs. Vous pouvez ignorer ces avertissements, car une fois que nous choisissons de générer la base de données à partir du modèle, les erreurs disparaissent.
Si vous examinez la fenêtre Propriétés, vous pouvez constater que le type de la propriété Name a été remplacé par DepartmentNames et que le type d’énumération nouvellement ajouté a été ajouté à la liste des types.
Si vous basculez vers la fenêtre Explorateur de modèles, vous voyez que le type a également été ajouté au nœud Types d’énumération.
Remarque
Vous pouvez également ajouter de nouveaux types d’énumération à partir de cette fenêtre en cliquant sur le bouton droit de la souris et en sélectionnant Ajouter un type d’énumération. Une fois le type créé, il apparaît dans la liste des types et vous pouvez lui associer une propriété.
Générer une base de données à partir du modèle
À présent, nous pouvons générer une base de données basée sur le modèle.
- Cliquez avec le bouton droit sur un espace vide sur l’aire du Concepteur d’entités, puis sélectionnez Générer une base de données à partir du modèle.
- La boîte de dialogue Choisir votre connexion de données de l’Assistant Génération de la base de données s’affiche. Cliquez sur le bouton Nouvelle connexion, spécifiez (localdb)\mssqllocaldb comme nom de serveur et EnumTest comme base de données, puis cliquez sur OK.
- Dans la boîte de dialogue qui s’affiche pour vous demander si vous souhaitez créer une base de données, cliquez sur Oui.
- Cliquez sur Suivant. L’Assistant Création d’une base de données génère alors un script en langage de définition de données (DDL) pour créer une base de données. Le script DDL généré s’affiche dans la boîte de dialogue Résumé et paramètres. Remarque : Le script DDL ne contient pas de définition pour une table qui mappe vers le type d’énumération.
- Cliquez sur Terminer. Le fait de cliquer sur Terminer n’exécute pas le script DDL.
- L’Assistant Création de base de données effectue les opérations suivantes : ouvre EnumTest.edmx.sql dans l’éditeur T-SQL, génère le schéma de magasin et les sections de mappage du fichier EDMX, puis ajoute les informations de chaîne de connexion au fichier App.config.
- Cliquez sur le bouton droit de la souris dans l’Éditeur T-SQL, puis sélectionnez Exécuter. Dans la boîte de dialogue de connexion au serveur qui s’affiche, entrez les informations de connexion de l’étape 2, puis cliquez sur Se connecter.
- 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, puis sélectionnez Actualiser.
Persister et récupérer des données
Ouvrez le fichier Program.cs où la méthode Main est définie. Collez le code suivant dans la fonction Main. Le code ajoute un nouvel objet Department au contexte. Il enregistre ensuite les données. Le code exécute également une requête LINQ qui retourne un Department où le nom est DepartmentNames.English.
using (var context = new EnumTestModelContainer())
{
context.Departments.Add(new Department{ Name = DepartmentNames.English });
context.SaveChanges();
var department = (from d in context.Departments
where d.Name == DepartmentNames.English
select d).FirstOrDefault();
Console.WriteLine(
"DepartmentID: {0} and Name: {1}",
department.DepartmentID,
department.Name);
}
Compilez et exécutez l'application. Le programme génère la sortie suivante :
DepartmentID: 1 Name: English
Pour afficher les données dans la base de données, cliquez avec le bouton droit sur le nom de la base de données dans l’Explorateur d’objets SQL Server, puis sélectionnez Actualiser. Ensuite, cliquez avec le bouton droit de la souris sur la table et sélectionnez Afficher les données.
Résumé
Dans cette procédure pas à pas, nous avons vu comment mapper des types d’énumération avec Entity Framework Designer et comment utiliser des énumérations dans le code.