Entity Framework est le framework de mapping objet-relationnel made by Microsoft.
Il propose une approche nommée code first sur laquelle nous allons nous pencher aujourd’hui.
Le principe est de générer et de faire évoluer le schéma de la base de données en se basant sur les classes des entités que l’on manipule dans le projet.
L’ensemble des exemples sont disponibles sur GitHub : https://github.com/ineat-conseil/demo-entityframework-codefirst
Installation de Entity Framework via NuGet
Nous aurons besoin du package EntityFramework. Les exemples ont été effectués à l’aide de la version 5.
Définition du database context
Dans notre exemple, nous sommes parti d’un projet console auquel nous avons ajouté un base de de donnée SQL Server CE.
Notre modèle sera relativement simple et représentera un utilisateur définie par un nom et prénom et qui possèdera une collection d’adresses. Chacune des entités possédera une propriété Id de type entier. Par convention, EF détectera cette colonne comme étant la clé primaire de la table associée.
On crée une classe qui héritera de DbContext, qui nous permettra d’obtenir le contexte de la base de données et de définir les entités que l’on souhaite y définir.
Utilisation du contexte
Pour pouvoir accéder à la base et créer une entité, il suffit de le faire en linq en instanciant au préalable le contexte.
Vous constaterez que votre base a été créée automatiquement à l’exécution du projet
Migration via NuGet
Nous allons activer la migration dans le projet en exécutant la commande Enable-Migrations dans la console NuGet.
Elle nous permettra de générer les fichiers de migration afin de mettre à jour notre base en cas de modification du modèle.
Un répertoire Migrations est créé et contient le fichier d’initialisation de la base.
Nous souhaitons modifier notre entité User pour ajouter le genre.
Après modification, lors de l’exécution du projet, on constate que ca ne fonctionne plus et pour cause, la base de données n’est plus synchronisé avec le modèle.
Présentation
Pour mettre à jour la base de données, nous allons, toujours dans la console NuGet, exécuter la commande Add-Migration AddGender puis pour appliquer la modification sur la base, nous exécuterons la commande Update-Database.
Et c’est tout 🙂
Pour aller plus loin
Il n’est pas imaginable de prendre la solution tel quel pour l’envoyer en production, comme vous l’avez remarqué, on ne maitrise pas, par exemple, la taille des champs.
En utilisant le namespace System.ComponentModel.DataAnnotations, il est possible de remédier à ce problème et de définir sur les propriétés des attributs permettant de définir la taille maximum des champs.
Il est aussi possible de le faire à l’aide de Fluent Api et d’aller plus loin en maitrisant complètement la manière dont la base de données va être créé.
Vous trouverez plus d’informations sur Fluent Api ici :
Configuring/Mapping Properties and Types with the Fluent API