Entity Framework est pour rappel un ORM (Object RelationShip Manager) qui permet de faire :
- Le mapping entre la base de données et les classes Entités
- De proposer les méthodes du CRUD (Create Read Update Delete)
Il existe 3 workflows :
- dataBase First
- Model First
- Code First
Lors de la création d’un projet MVC 4 dans Visual Studio 2012 , EF 5 est intégré par défaut
Cet article a pour but d’expliquer comme implémenter Entity Framework en utilisant le workflow Code First (et générer la base de données)
-
Code First
Le workflow Code First consiste à écrire comme son nom l’indique en 1er les classes entités (qui représentent le Model) puis:
- soit de faire le mapping avec une base de données déjà existante
-
soit à partir de ces dernières de générer la base de données.
-
Les classes Entités (Model)
Dans notre exemple nous travaillons sur une application simple de gestion de Music (Music Store)
Nous notre projets MVC dans le répertoire Models nous allons créer 2 classes qui représentent nos entités comme suit :Album.cs
Genres.cs
-
La classe de mapping (DbContext)
Dans Models on crée une classe MvcMusicStoreEntities.cs qui hérite de DbContext, ça représente notre DBcontext
Dans notre exemple on a fait le mapping :Table Albums –> classe Album
Table Genres –> classe Genre
-
La chaine de connexion
Dans le fichier web.config, mettre la bonne chaine de connexion
Dans <connectionSring>Exemple:
<add name= »MvcMusicStoreEntities » connectionString= »Data Source=.\sqlexpress;Initial Catalog=MusicStore;Integrated Security=True » providerName= »System.Data.SqlClient » />
Comme on peut le remarquer le nom de la chaine de connexion « MvcMusicStoreEntities » correspond au nom du DBContextArrivé à ce point, si la base MusicStore existe déjà, EF est implémenté, et on peut commencer à l’utiliser.
Par contre si notre but est de générer la base à partir du model, c’est allons utiliser EF Migration comme suit.
-
Activer la migration
La toute 1ere fois, il faut activer la migration sur le projet.
Pour ceci dans la console Package Manager, lancer la commande
enable-migrations en lui précisant le nom du context avec -ContextTypeName en argument
enable-migrations -ContextTypeName MvcMusicStoreEntities
Cette commande a créé un fichier configuration.cs ainsi qu’un répertoire Migration
Ce fichier va contenir la configuration des migrations.
Remarque : si la base de données existait déjà, un fichier InitialCreate est créé en même temps que la configuration. Sinon il faudra le crée avec 1ere migration -
Créer une migration
Le terme de migration désigne le fait de mettre à jour la base de donnée en fonction d’un Model (entités)
Pour créer une migration on lance dans le package manager la commande : add-migration « Nomdela migration »
Exemple dans notre projet on lance add-migration InitialCreate
Cette commande a créer un fichier dans le répertoire Migration, ce fichier est nommé avec le nom de la migration qui a été utilisé avec add-migration
Il contient le code qui va permettre de générer les éléments du model
-
Mettre à jour la base de données
Pour appliquer les mises à jour en attentes il faut exécuter la commande update-database
On peut donc voir que les 2 tables ont été crééent.La table _MigrationHistory historise les migrations, afin que lors des prochaines migrations ce ne sont que les changements sur la bases qui sont appliqués.
Exemple : dans Album on rajoute la propriété NbTracks
On lance la commande add-migration AddNbTracks
Puis on met à jour la base de données avec update-database
Remarque sur la commande update-database:Cette commande possède 2 arguments facultatifs:
-verbose : permet de voir les détails de ce qui est appliqué sur la base de données
-script : permet de générer un fichier sql avec le script qui permet d’appliquer les changements, dans ce cas les changements ne sont pas appliqué automatiquement sur la base.
Dans un 2eme post nous verrons comment migrer les données avec la migration et comment rendre la migration automatique.