Hébergement - Code .Net

C# – Scaffolding avec Entity Framework Core

Le moteur de base de données MSSQL Express pose quelques contraintes un peu gênantes lorsque l’on achète pas la licence, comme une taille de base de données de 10GB maximum. Heureusement il est possible d’utiliser Entity Framework Core pour accéder à MySQL Community tout en permettant d’utiliser les fonctionnalités tout comme si on accédait à MSSQL.

Dans cet article je vais montrer comment utiliser le Entity Framework Core Scaffolder pour accéder à une base de données MySQL. Facile et très puissant!

Ce dont vous aurez besoin :

  • Visual Studio (la version la plus récente de préférence) avec .Net Core 2.1 ou plus récent;
  • MySQL server;
  • MySQL Workbench ou autre outil pouvant vous aider à créer et modifier des bases de données dans MySQL. Vous pouvez aussi utiliser MySQL Shell si vous vous sentez prêts pour un défi!

1. Installation des outils

Tout d’abord, il est essentiel d’avoir les bons outils d’installés. Pour l’exemple je choisirai la combinaison MySQL/MySQL Worbench. Si vous voulez me suivre, allez à site Web de MySQL et téléchargez MySQL Server pour Windows. L’installateur comprend tout ce dont vous avez besoin, vous n’aurez qu’à sélectionner Workbench et MySQL Server quand vous passerez les étapes.

Une fois les logiciels installés, lancez MySQL Workbench et ajoutez une connexion. Voici quelques paramètres par défaut si vous avez installé MySQL sur votre machine locale. Votre mot de passe pour le compte root sera demandé lors de votre première connexion.

Add new connection to MySQL server.

2. Création d’une base de données

Nous allons simplement créer une base de données de test avec deux tables jointes. Ce sera une classe peut contenir plusieurs étudiants donc une relation un vers plusieurs. Normalement il serait possible de considérer qu’un étudiant peut appartenir à plusieurs classes, mais ça compliquerait l’exemple sans raison.

Création

Démarrez MySQL Workbench et créez une nouvelle base de données (schéma). Ensuite, cliquez sur Apply dans le coin en bas à droite.

Create new MySQL Database.

Si vous voyez apparaitre cette fenêtre, vous pouvez cliquer encore sur Apply pour exécuter le script SQL.

Run database creation SQL.

La prochaine étape est de mettre la base de données par défaut pour éviter d’exécuter des requêtes sur d’autres bases de données! Cliquez droit sur le schéma puis sur Set as detault schema.

Set as default database schema.

Création des tables

Nous avons besoin de deux tables, ça tombe bien parce que c’est très facile de créer des tables avec SQL Workbench. Cliquez droit sur le schéma puis sur Create table.

Create table in schema

Ci-dessous se trouve la table Student. Remarquez le charset utf8mb4 qui se conforme aux standards UTF8. Je suggère de prendre ce charset pour vos tables puisqu’elles pourront être dans accueillir les différents caractères spéciaux. J’aimerais aussi attirer votre attention sur les abréviations que MySQL semble croire être très évidentes. Vous pouvez laisser votre souris sur elles pour montrer une étiquette, sinon voici les plus importantes.

  • PK – Indique une clé primaire.
  • NN – Not null, la colonne ne peut pas contenir de valeur nulle. Très bien, je n’aime pas les nulls du tout!
  • UQ – Doit être unique donc une seule instance de la valeur peut exister dans la table.
  • AI – Auto incremented column, le moteur de base de données incrémentera automatiquement le chiffre dans la colonne au fur et à mesure que des rangées seront ajoutées.

Les types de données ne sont pas exactement comme ceux utilisés avec MSSQL, toutefois plusieurs sont similaires comme VARCHAR et INT. J’utilise justement ces deux types dans l’exemple pour contenir les chaînes de caractères et des entiers respectivement.

Student Table

Vous trouverez maintenant la table Classe ci-dessous. La colonne Level signifie l’année dans laquelle l’étudiant est, soit 1, 2, 3 … dépendamment de comment fonctionne votre système d’éducation.

Class table

Une fois que vous aurez cliqué sur Apply pour la création des deux tables, vous pouvez cliquer droit puis Refresh All sur le schéma et vous aurez une base de données comme celle-ci. Il ne reste plus que la relation à ajouter.

Two tables created.

Ajout de la clé étrangère

Nous allons ajouter une clé étrangère en allant premièrement dans la table qui la contiendra, c’est à dire Student parce qu’une classe peut avoir plusieurs étudiants (encore une fois pour simplifier l’exemple).

Student Foreign Key

Donnez un nom à votre clé étrangère et sélectionnez la table de référence dans le panneau de gauche. Puis, dans le panneau de droite, sélectionnez la colonne qui sera affectée. Ceci créera une référence et un index. Finalement, n’oubliez pas de cliquer de Apply pour affecter les changements à la base de données.

3. Création d’un nouveau projet dans Visual Studio

Créez un nouveau projet .Net Core 2.1+ dans Visual Studio. N’importe quel type fonctionnera et vous pouvez même créer un projet avec le .Net Framework tout en utilisant la librarie (NuGet) de .Net Core en suivant les mêmes étapes ci-dessous.

Created .Net Core Project

4. Installation des packages Nuget requis

Cliquez droit sur le projet auquel vous voulez ajouter les libraries puis cliquez sur Manage Nuget Packages. Ensuite, cliquez sur l’onglet Browse.

ManageNugetPackages

Pour l’interface utilisateur

Vous devez installer les deux packages suivant :

  • MySql.Data.EntityFrameworkCore.Design
  • Microsoft.EntityFrameworkCore.Tools

Vous pouvez les retrouver dans l’onglet Browse et cliquez sur Install avec la version désirée (je suggère la dernière version). Plusieurs packages seront installés pour préparer l’environnement pour pouvoir Scaffold votre base de données avec le Entity Framework Core. Vous pouvez cliquer ok et accept sur les fenêtres.

Ou vous pouvez utiliser le Package Manager Console

Vous pouvez aussi utiliser le Package Manager Console avec Install-Package comme montré ci-dessous.

Install-Package MySql.Data.EntityFrameworkCore.Design
Install-Package Microsoft.EntityFrameworkCore.Tools

5. Scaffolding

Ouvrez la console Package Manager. Si vous ne pouvez la trouver, allez dans View -> Other Windows -> Package Manager Console à partir du menu du haut de Visual Studio. Un panneau comme celui ci-dessous devrait apparaître.

Package Manager Console

Vous devez entrer la commande suivante dans le Package Manager Console pour débuter le scaffold de votre base de données. N’oubliez pas d’ajuster les différents éléments à votre situation comme le mot de passe. Vous pouvez aussi créer une architecture de répertoire pour y générer les classes du Entity Framework, comme je fais ici avec DataAccess\DataObjects.

Scaffold-DbContext "server=localhost;port=3306;user=root;password=votremotdepasse;database=test_scaffolding" MySql.Data.EntityFrameworkCore -OutputDir DataAccess\DataObjects -f

Il est aussi possible de spécifier les tables à générer comme dans cet exemple :

Scaffold-DbContext "server=localhost;port=3306;user=root;password=votremotdepasse;database=test_scaffolding" MySql.Data.EntityFrameworkCore -OutputDir DataAccess\DataObjects -Tables class,student -f

Pour votre information, le -f forcera la régénération des classes déjà existantes à partir de la base de données, donc si vous effectuez des changements, vous devrez régénérer le modèle avec la commande. Ceci veut aussi dire que si vous faites des changements aux classes générées, ceux-ci seront effacés à moins de faire les ajustements manuellement. Un autre élément à surveiller est le projet auquel la commande est affectée, que vous verrez à l’endroit où est placé le rectangle rouge dans la prochaine image.

Scaffolding MySQL

Je montre aussi un exemple de ce qui arrive quand on omet de mettre le -f. Voyez le message d’erreur qui indique que les classes ne peuvent être écrasées.

Use the Created Context

Une fois que le data context a été créé, vous aurez une classe par table en plus d’une classe pour les accès aux données.

Il est maintenant temps de se rendre dans Program.cs (j’ai une application console mais ça pourrait être votre formulaire Windows Forms ou Web Forms) pour appeler le DataContext.

using System;
using System.Linq;

using ScaffoldingWithMySQL.DataAccess.DataObjects;

namespace ScaffoldingWithMySQL
{
    class Program
    {
        static void Main(string[] args)
        {
            test_scaffoldingContext dataContext = new test_scaffoldingContext();
            
            //Création d'un nouvel objet Étudiant (Student) pour l'ajouter à la classe
            Student newStudent = new Student()
            {
                CardNumber = "TEST329812",
                Level = 1,
                FirstName = "Simon",
                LastName = "Test"
            };
            
            //Création d'un nouvel objet classe
            Class newClass = new Class()
            {
                Department = "English",
                Level = 1,
                Title = "English Class",
                Year = 2019
            };

            //Ajoutons maintenant l'étudiant à la classe puis ajoutons la classe au DataContext
            newClass.Student.Add(newStudent);  
            dataContext.Class.Add(newClass);

            //N'oubliez pas de sauvegarder le DataContext pour appliquer vos changements à la base de données
            dataContext.SaveChanges();
        }
    }
}

Le code ci-dessus illustre un accès aux données à partir du Entity Framework Core. Nous ajoutons une classe et un étudiant puis ajoutons la classe au DataContext sans oublier de sauvegarder nos changements. Si vous souhaitez avoir plus de détails sur la procédure de mise en place du Entity Framework Core, vous pouvez visiter directement le site Web de MySQL. J’espère bien en avoir aidé quelques-uns, bonne programmation!

Previous article Visual Basic - Création d'un nouveau projet dans Visual Studio

Related posts

0 Comments

No Comments Yet!

You can be first to comment this post!

Leave a Comment

Your data will be safe! Your e-mail address will not be published. Also other data will not be shared with third person. Required fields marked as *