Prise en charge des énumérations – Code First

Remarque

EF5 et ultérieur uniquement : les fonctionnalités, les 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 et la procédure pas à pas montrent comment utiliser les types enum avec Code First d’Entity Framework. Elle montre aussi comment utiliser des énumérations dans une requête LINQ.

Cette procédure pas à pas utilise Code First pour créer une base de données, mais vous pouvez aussi utiliser Code 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 comme 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 mapper des types enum avec Code First d’Entity Framework. Elle montre aussi comment utiliser des énumérations dans une requête LINQ.

Présentée par : Julia Kornich

Vidéo : WMV | MP4 | WMV (ZIP)

Conditions préalables

Vous devez disposer de Visual Studio 2012, Ultimate, Premium, Professionnel ou Web Express Edition installé pour effectuer cette procédure pas à pas.

 

Configurer le projet

  1. Ouvrir Visual Studio 2012
  2. Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Projet
  3. Dans le volet de gauche, cliquez sur Visual C#, puis sélectionnez le modèle Console
  4. Entrez EnumCodeFirst comme nom du projet, puis cliquez sur OK

Définir un nouveau modèle en utilisant Code First

Quand vous utilisez le développement Code First, vous commencez généralement par écrire des classes .NET Framework qui définissent votre modèle (domaine) conceptuel. Le code ci-dessous définit la classe Department (Département).

Le code définit également l’énumération DepartmentNames. Par défaut, l’énumération est de type int. La propriété Name de la classe Department est de type DepartmentNames.

Ouvrez le fichier Program.cs et collez les définitions de classe suivantes.

public enum DepartmentNames
{
    English,
    Math,
    Economics
}     

public partial class Department
{
    public int DepartmentID { get; set; }
    public DepartmentNames Name { get; set; }
    public decimal Budget { get; set; }
}

 

Définir le type dérivé de DbContext

En plus de définir des entités, vous devez définir une classe qui dérive de DbContext et expose les propriétés DbSet<TEntity>. Les propriétés DbSet<TEntity> indiquent au contexte quels types vous voulez inclure dans le modèle.

Une instance du type dérivé de DbContext gère les objets d’entité au moment de l’exécution, ce qui comprend le remplissage des objets avec les données d’une base de données, le suivi des modifications et la conservation des données dans la base de données.

Les types DbContext et DbSet sont définis dans l’assembly EntityFramework. Nous allons ajouter une référence à cette DLL en utilisant le package NuGet EntityFramework.

  1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le nom du projet.
  2. Sélectionnez Gérer les packages NuGet…
  3. Dans la boîte de dialogue Gérer les packages NuGet, sélectionnez l’onglet En ligne, puis choisissez le package EntityFramework.
  4. Cliquez sur Install.

Notez qu’en plus de l’assembly EntityFramework, des références aux assemblys System.ComponentModel.DataAnnotations et System.Data.Entity sont également ajoutées.

En haut du fichier Program.cs, ajoutez l’instruction using suivante :

using System.Data.Entity;

Dans Program.cs, ajoutez la définition de contexte. 

public partial class EnumTestContext : DbContext
{
    public DbSet<Department> Departments { get; set; }
}

 

Conserver et récupérer des données

Ouvrez le fichier Program.cs où la méthode Main est définie. Ajoutez 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 dont le nom est DepartmentNames.English.

using (var context = new EnumTestContext())
{
    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} Name: {1}",
        department.DepartmentID,  
        department.Name);
}

Compilez et exécutez l'application. Le programme génère la sortie suivante :

DepartmentID: 1 Name: English

 

Visualiser la base de données générée

Quand vous exécutez l’application la première fois, Entity Framework crée une base de données pour vous. Comme nous disposons de Visual Studio 2012, la base de données est créée sur l’instance LocalDB. Par défaut, Entity Framework nomme la base de données d’après le nom complet du contexte dérivé (pour cet exemple, il s’agit de EnumCodeFirst.EnumTestContext). Les fois suivantes, la base de données existante sera utilisée.  

Notez que si vous apportez des modifications à votre modèle après la création de la base de données, vous devez utiliser Migrations Code First pour mettre à jour le schéma de base de données. Consultez Code First pour une nouvelle base de données pour obtenir un exemple d’utilisation de Migrations.

Pour visualiser la base de données et les données, procédez comme suit :

  1. Dans le menu principal de Visual Studio 2012, sélectionnez Affichage ->Explorateur d’objets SQL Server.
  2. Si LocalDB n’est pas dans la liste des serveurs, cliquez avec le bouton droit sur SQL Server, puis sélectionnez Ajouter SQL Server Utiliser l’Authentification Windows par défaut pour vous connecter à l’instance LocalDB
  3. Développer le nœud LocalDB
  4. Développez le dossier Bases de données pour voir la nouvelle base de données et accédez à la table Department. Notez que Code First ne crée pas de table mappée au type d’énumération.
  5. Pour visualiser les données, cliquez avec le bouton droit sur la table, puis sélectionnez Afficher les données.

Résumé

Dans cette procédure pas à pas, nous avons examiné comment utiliser des types enum avec Code First d’Entity Framework.