Module : .
NET
Chapitre : Entity Framework Core
Dr. Mouad BANANE
EMSI Casablanca 2023 - 2024
Chapitre 4 : Entity Framework Core
Entity Framework Core
3
Plan
◼ Introduction
◼ Qu’est-ce qu’un ORM?
◼ Qu'est-ce que Entity Framework Core?
◼ Historique
◼ Architecture
◼ Fonctionnalités
◼ Approches
➢ Entity Framework Core Database First
➢ Entity Framework Core Code First
cours C# - Dr. Mouad BANANE 4
Introduction
◼ Comment assurer le lien entre les données (qui est SQL) et le langage de
programmation que ce soit C#, Java..
cours C# - Dr. Mouad BANANE 5
◼ Qu’est-ce qu’un ORM?
◼ ORM (object-relational mapping) est un outil qui sert à manipuler d'une
manière automatisée les données de l’objet vers la base de données
relationnelle. L’ORM comprend trois parties principales:
● Les objets de classe
● Les objets de la base de données relationnelle
● Les informations de Mappage pour les objets de la base de données
relationnelles (Tables, Vues et Procédures de stockage).
est un outil qui génère des classes suite à l’interaction avec la base de données,
comme illustré:
cours C# - Dr. Mouad BANANE 6
Qu'est-ce que Entity Framework Core?
◼ Entity Framework Core (EFCore), comme tous les ORM(s), permet aux
développeurs de manipuler des données accessibles par des objets sans
devoir se préoccuper de la données et des tables.
◼ EFCore prend en charge de nombreux fournisseurs de base de données: SQL
Server, PostgreSQL, MySQL, Oracle DB ...
cours C# - Dr. Mouad BANANE 7
Qu'est-ce que Entity Framework Core?
◼ EFCore est destiné à être utilisé avec les applications .NET Core
◼ La figure suivante illustre la place d'EFCore dans votre application:
◼ Comme le montre la figure, EFCore fait partie de la couche Data. Il s'insère
entre les classes de domaine et la base de données.
cours C# - Dr. Mouad BANANE 8
Historique
◼ La première version de Entity Framework (EF v1) était incluse avec .NET
Framework 3.5 Service Pack 1 et Visual Studio 2008 Service Pack 1, publiée
le 11 août 2008.
◼ Après plusieurs années et l'apparition de plusieurs versions de EF, Microsoft
a décidé de rendre .NET multiplateforme (fonctionne sous Windows, Linux et
MacOS), ce qui signifie que la prochaine version de EF serait une réécriture
complète.
◼ Le 27 juin 2016, la nouvelle version a été publiée sous le nom d'Entity
Framewok Core 1.0 avec .NET Core 1.0 et [Link] Core 1.0.
◼ La version la plus récente est Entity Framework Core 8
◼ La prochaine version stable planifiée est EF Core 9.0, ou EF9, prévue pour
novembre 2024
cours C# - Dr. Mouad BANANE 9
API EFCore
▪ L'API EFCore inclut les fonctionnalités suivantes:
➢ Mapper les classes de domaine (entité) au schéma de la base de
données.
➢ Traduire et exécuter des requêtes LINQ en SQL.
➢ Suivre les modifications survenues sur les entités au cours de leur
durée de vie.
➢ Enregistrer les modifications dans la base de données.
cours C# - Dr. Mouad BANANE 10
Approches
▪ Il existe deux approches de l’EFCore :
❑ Code First
❑ Database First
cours C# - Dr. Mouad BANANE 11
Approche Database First
▪ Si vous avez déjà une base de données, EF permet de générer automatiquement
un modèle de données (.edmx) qui contient des classes et des propriétés qui
correspondent à des objets de la base de données existantes telles que les tables
et les colonnes.
cours C# - Dr. Mouad BANANE 12
Approche Code First
▪ Vous avez une base de données existante ou non, vous pouvez coder vos
propres classes et propriétés qui correspondent aux tables et colonnes et de les
utiliser avec EF, sans fichier. Edmx.
▪ EF peut également créer la base de données à partir des entités.
cours C# - Dr. Mouad BANANE 13
Approche Code First
▪ Avec l'approche Code First, on peut se concentrer sur la conception de la couche
domaine et commencer d'abord à créer des classes plutôt que de créer la base
de données et ensuite créer les classes qui correspondent à la conception de la
base de données.
▪ Le principe est de générer la base à partir d’un traitement de code. Pour se faire
on à besoin d’écrire les entités, de définir leurs propriétés de navigation,
développer la classe context et déclarer les entités qui vont être des tables en
tant que DbSet.
▪ Le Mapping des classes dans la base de données sera fait d’une manière implicite
en utilisant les conventions par défaut de EFCore CodeFirst. On peut également
configurer les entités en utilisant Data Annotation ou Fluent API afin de
remplacer les conventions par défaut.
cours C# - Dr. Mouad BANANE 14
Création de la solution et installation de EF Core
▪ EFCore ne fait pas partie de .NET Core. Il est disponible sous forme de package
NuGet.
▪ Installer Entity Framework Core dans la solution à travers le gestionnaire de
package NuGet
cours C# - Dr. Mouad BANANE 15
Approche Database First
▪ Scaffold-DbContext "Server=DESKTOP-0FLUBLC\SQLEXPRESS;
Database=DBG42;integrated security=True;TrustServerCertificate=True;"
[Link] -OutputDir Models
cours C# - Dr. Mouad BANANE 16
Exemple
cours C# - Dr. Mouad BANANE 17
Exemple
cours C# - Dr. Mouad BANANE 18
Exemple
cours C# - Dr. Mouad BANANE 19
Résumé
▪ "Code First" et "Database First" sont deux approches différentes pour
travailler avec des bases de données dans le contexte d'Entity Framework (EF),
une technologie de mapping objet-relationnel.
Code First :
▪ Dans cette approche, vous commencez par définir vos entités (classes) en code,
sans avoir une base de données existante.
▪ Vous créez vos classes d'entités avec des propriétés qui représentent les tables
que vous souhaitez créer dans la base de données.
▪ Ensuite, à l'aide d'Entity Framework, vous générez la base de données en
fonction de ces classes.
▪ Entity Framework se charge de créer la structure de la base de données selon les
conventions ou configurationscours
que vous avez spécifiées dans le code.
C# - Dr. Mouad BANANE 20
Résumé
▪ Avantages du Code First :
- Il offre un contrôle complet sur la structure de la base de données à partir du
code.
- Idéal pour les développeurs préférant une approche orientée objet.
cours C# - Dr. Mouad BANANE 21
Résumé
▪ Database First :
▪ Dans cette approche, vous commencez avec une base de données existante (peut-
être déjà conçue et peuplée avec des données).
▪ À l'aide d'Entity Framework, vous générez des classes d'entités et un contexte basé
sur cette base de données existante.
▪ Entity Framework reverse-engineering la structure de la base de données pour créer
les classes qui représentent les tables ainsi que le contexte pour interagir avec ces
tables.
Avantages du Database First :
▪ - Utile lorsque vous travaillez avec une base de données existante et que vous
souhaitez générer du code basé sur cette base de données.
▪ - Peut être plus rapide pour démarrer lorsqu'une base de données existante doit être
intégrée dans un projet. cours C# - Dr. Mouad BANANE 22
Exercice Série 4
cours C# - Dr. Mouad BANANE 23
Correction
1. ORM
2. EFCore
3. Code First et Database First
4. Code First consiste à créer d'abord les classes en code et à générer ensuite la base de
données, tandis que Database First consiste à générer d'abord les classes à partir d'une
base de données existante. Chacune a ses propres avantages en fonction des besoins du
projet et des préférences des développeurs.
5. "scaffold" fait référence à la génération automatique de code à partir d'une base de
données existante. Cela signifie que vous pouvez utiliser l'outil en ligne de commande
appelé "Scaffold-DbContext" pour créer des entités (classes) basées sur les tables de la
base de données, ainsi que les contextes nécessaires pour interagir avec cette base de
données.
6. En utilisant cette commande, Entity Framework Core examine la structure de la base de
données et génère automatiquement des
cours C# - [Link] d'entités correspondant aux tables
Mouad BANANE 24
Approche Code First
Code First
Scaffold
App DB
Migration
DataBase First
cours C# - Dr. Mouad BANANE 25
Approche Code First
▪ Avec l'approche Code First, on peut se concentrer sur la conception de la couche
domaine et commencer d'abord à créer des classes plutôt que de créer la base
de données et ensuite créer les classes qui correspondent à la conception de la
base de données.
▪ Le principe est de générer la base à partir d’un traitement de code. Pour se faire
on à besoin d’écrire les entités, de définir leurs propriétés de navigation,
développer la classe context et déclarer les entités qui vont être des tables en
tant que DbSet.
▪ Le Mapping des classes dans la base de données sera fait d’une manière implicite
en utilisant les conventions par défaut de EFCore CodeFirst. On peut également
configurer les entités en utilisant Data Annotation ou Fluent API afin de
remplacer les conventions par défaut.
cours C# - Dr. Mouad BANANE 26
Approche Code First
▪ Création des Classes Models
▪ La génération de la base de données avec les tables, est appelée Migration
▪ Mais avant, il faut installer les tools
cours C# - Dr. Mouad BANANE 27
DatabaseContext
▪ Il faut créer la classe DatabaseContext
cours C# - Dr. Mouad BANANE 28
[Link]
▪ Ajouter les infos de connexion
cours C# - Dr. Mouad BANANE 29
L’éxecution
▪ Build
▪ Dans la console, nous exécutons la commande de migration :
add-migration [Non_de_migration]
▪ Si la premiere migration, un nouveau dossier Migration à été ajouter
▪ Enfin il faut envoyer les modifications à la base de données
▪ update-database
cours C# - Dr. Mouad BANANE 30
One2One, One2Many, Many2Many
cours C# - Dr. Mouad BANANE 31
One2One
▪ Exemple Personne et Maison
cours C# - Dr. Mouad BANANE 32
One2Many
▪ Exemple Employé et Departement
cours C# - Dr. Mouad BANANE 33
Many2Many
▪ Exemple Module et Etudiant
cours C# - Dr. Mouad BANANE 34
Many2Many
cours C# - Dr. Mouad BANANE 35