Core MVC - Ef-Dbf
Core MVC - Ef-Dbf
Core MVC - Ef-Dbf
TP n°2
Dans ce TP, nous allons travailler sur une solution ASP.NET Core MVC et nous allons
nous baser sur l’approche de développement « DataBase First ».
Wissem Eltaief 1
TP n°2 Iset Sousse
Visual Studio affiche qu’il procédera à l’installation d’un ensemble de packages liés à EFCore, cliquer
sur « OK ». Puis accepter les termes de licences (voir figures ci-dessous).
Une fois terminé, c’est bon, les packages EFCore pour SQL Server sont maintenant disponibles pour
le projet « CinemaManager » et sont prêts à être utilisés.
Une fois terminé, vérifier que vous avez bel et bien ces packages dans l’explorateur de solutions (sous
dépendances).
L’application CinemaManager utilise une base de données pour stocker les informations sur des
films et leurs producteurs.
Pour créer une nouvelle base de données, ouvrir l’explorateur de serveurs (à gauche, voir figure ci-
dessous).
Wissem Eltaief 2
TP n°2 Iset Sousse
Faire un clic droit sur « Connexions de données » et choisir Créer une nouvelle base de données
SQL Server… Dans la boite de dialogue sui s’ouvre saisir « (localdb)\mssqllocaldb » comme nom
du serveur (c’est le nom par défaut, attention les parenthèses font partie du nom et il y a 2 ‘s’ et 2 ‘l’
qui se suivent) puis attribuer le nom CinemaDB comme nom de la base puis cliquer sur OK (voir
figure ci-dessous).
C’est bon, la base a été créée (elle est vide) et fait son apparition dans l’explorateur de serveurs.
Wissem Eltaief 3
TP n°2 Iset Sousse
Faire un clic droit sur « Tables », puis « Ajouter une nouvelle table ».
Dans l’interface qui apparait, créer les colonnes suivantes pour la table Producer.
NB :
- Pour rendre l’Id auto-incrémental, il suffit soit d’ajouter la propriété IDENTITY dans
le code T-SQL ou de modifier la propriété « Spécification du compteur » comme suit :
=>
- Pour attribuer le nom « Producer » à la table, Ecrire ceci dans le code T-SQL qui devrait
apparaître finalement comme suit :
- Remplir la table avec quelques enregistrements qui vont servir pour les prochains tests
(clic-droit sur Producer, puis Afficher les données de la table).
Wissem Eltaief 4
TP n°2 Iset Sousse
Afin de créer le modèle de données correspondant à la base précédente, il faut suivre les étapes
suivantes :
- Ajouter la chaine de connexion relative à la BD au fichier appsettings.json.
NB :
o CS_Name est le nom de la chaine de connexion déclaré dans appsettings.json. Elle
s’écrit ConnextionStrings :… car on va la lire à partir de l’environnement (variable
d’environnement).
o Le dossier de génération du modèle est « Models\Cinema » (voir figure ci-dessous).
Cette commande créera un dossier « Cinema » sous « Models » contenant deux classes :
o Une classe de modèle qui correspond à la table Producer.
o Une classe de contexte « CinemaDbContext » qui hérite de DbContext et qui joue le
rôle d’un pont entre les classes du modèle et la BD. Elle permettra d’unir tous les
éléments du modèle dans un même contexte et de les manipuler avec des opérations
de type CRUD.
Cette classe déclare une référence de type DbSet vers la classe Producer.
C’est cette référence « Producers » qui servira d’accéder aux données des
producteurs et de les manipuler.
Wissem Eltaief 5
TP n°2 Iset Sousse
A ce niveau, c’est bon, le modèle est prêt à être utilisé par l’application pour interroger la base de
données.
Le nouveau contrôleur ajouté contient un ensemble de méthodes (Index, Details, Create, Edit et
Delete) sur lesquelles on va agir afin de développer les CRUD des producteurs.
NB : Pour pouvoir tester l’application, il faut faire le nécessaire afin que le contrôleur
ProducersController soit celui sur lequel démarre l’application à la place du HomeController.
Permettre à l’action Index() de ce contrôleur de lister les producteurs depuis la table Producer de la
base de données. Bien évidemment, le code de l’action Index() doit être modifié et la vue Index
correspondante doit être créée.
NB :
- Pour pouvoir accéder aux producteurs, il faut créer une instance de la classe
CinemaDBContext. Ceci se fera par injection de dépendance au niveau du constructeur du
contrôleur.
CinemaDBContext _context;
public ProducersController(CinemaDBContext context)
{
_context = context;
}
Wissem Eltaief 6
TP n°2 Iset Sousse
- Pour créer la vue Index, faire un clic droit dans le code de l’action Index, Ajouter une vue…
puis choisir Vue Razor.
- Dans la fenêtre Ajouter Vue Razor, garder Index comme nom, choisir l’option List pour le
template (Modèle), sélectionner la classe de modèle Producer (CinemaManager-
X.Models.Cinema) et la classe CinemaDBContext (CinemaManager-X.Models.Cinema)
comme classe de contexte.
Permettre à ces actions d’ajouter un nouveau producteur en modifiant l’argument de la 2ème méthode
(POST) et en utilisant la méthode Add() d'un objet producteur et SaveChanges() de l’objet _context.
Garder la méthode GET telle quelle.
Afin de tester l’action Create, il faut ajouter la vue correspondante (choisir l’option Create pour le
template).
La deuxième s’occupe de la mise à jour des données sur la base. Cette méthode doit accepter une
instance de la classe Producer comme paramètre.
E. Détailler un producteur
Développer l’action Details afin d’afficher les détails d'un producteur dans une vue appropriée.
Wissem Eltaief 7
TP n°2 Iset Sousse
2. Créer la relation entre les deux tables Movie et Producer basée sur les deux colonnes
ProducerId du côté Movie et Id du côté Producer.
Clic-droit sur « Clés étrangères », puis Ajouter une nouvelle clé étrangère. Choisir un nom pour
la relation, par exemple « FK_Movie_Prod » (FK pour dire Foreign Key).
Une nouvelle instruction apparaitra au niveau du code T-SQL de la table Movie. Cette ligne est
à modifier avec les bonnes informations.
3. Remplir la table Movie avec des données de test. Vérifier que l’association est bel et bien
fonctionnelle (c’est-à-dire, qu’on refuse d’ajouter un film ayant un id d’un producteur
inexistant).
6. Parcourir les différentes actions de MoviesController et les tester afin de s’assurer que tout
marche très bien.
Wissem Eltaief 8