• 6 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 18/04/2023

Créez un modèle d’objet avec l’intégration database first

Importez des modèles à partir d’une base de données existante

Il est maintenant temps de retourner dans Visual Studio et de générer quelques modèles de données à partir de votre nouvelle base de données.

Pour éviter toute confusion de contextes de base de données, nous allons créer une nouvelle application MVC appelée MesRecettes2. Nous allons utiliser ce projet pour découvrir l’intégration database first. Vous n’avez donc pas besoin d’inclure une authentification, du genre compte utilisateur individuel. 

Créez un nouveau projet MVC et, lorsqu’il est prêt, ajoutez-y un nouveau dossier nommé Data. Il s’agit du dossier où seront enregistrés les modèles issus de la génération automatique.

Visual Studio : nouveau projet MVC
Visual Studio : nouveau projet MVC

Générez automatiquement un modèle de base de données avec la console du gestionnaire de packages.

Au moment de la rédaction de ce cours, .NET Core ne dispose pas d’un mécanisme de génération automatique de la base de données intégré directement dans l’interface utilisateur de Visual Studio. Nous allons utiliser la console du gestionnaire de package à la place.

Si elle n’est pas déjà ouverte, ouvrez la console du gestionnaire de packages en cliquant sur le menu Tools, puis sélectionnez NuGet Package Manager et Package Manager (console du gestionnaire de packages)

À l’invite, exécutez la commande suivante :

Scaffold-DbContext “Server=nom-de-votre-serveur;Database=nom-de-votre-base-de-données;
Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir votre-dossier-cible

Attention, si vous avez une erreur à l’exécution de la commande, il vous manque probablement des packages nuget. Ajoutez-les avec ces commandes :

Install-Package Microsoft.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.Tools
Install-Package Microsoft.EntityFrameworkCore.SqlServer

N’oubliez pas que le nom du serveur, que vous fournirez pour l’attribut Server, est le nom du serveur local auquel vous vous êtes connecté à l’aide de SSMS lorsque vous avez créé cette base de données. Si vous ne vous en souvenez pas, vous pouvez le retrouver en faisant un clic droit sur votre base de données dans SSMS. 

L’attribut Database est le nom que vous avez donné à la base de données dans SSMS.

L’attribut -OutputDir est le nom du dossier dans lequel vous voulez que le nouveau modèle soit généré. Il s’agit du nouveau dossier, Data, que nous avons créé il y a quelques instants.

Dans mon cas, la commande ressemble à ceci :

Visual Studio : instruction Scaffold-DbContext
Visual Studio : instruction Scaffold-DbContext

La durée de l’exécution de la commande dépend de la puissance de traitement de votre système. L’invite réapparaît dans la console du gestionnaire de packages lorsque le processus est terminé, et une série de fichiers .cs apparaît dans le dossier de sortie dans le volet Solution Explorer.

Visual Studio : nouveau modèle de données généré automatiquement
Visual Studio : nouveau modèle de données généré automatiquement

Ouvrez chaque nouveau fichier et vérifiez son contenu. Vous devriez avoir un code pratiquement identique à ceux de la première partie de ce cours.

Une première différence est que tous les modèles sont des classes partielles. Vous pouvez ainsi étendre la classe en créant une autre classe partielle pour n’importe quelle classe du modèle.

La seconde est qu’il existe une nouvelle classe de contexte de base de données : MesRecettes2Context. Il s’agit de votre classe DbContext pour votre base de données. Puisque nous n’avons pas créé manuellement les tables Entity Framework dans la base de données (AspNetUsers, AspNetRoles, AspNetClaims, etc.), vous ne les verrez pas dans votre DbContext. Vous pouvez injecter .NET Identity dans l’application, mais ce n’est pas indispensable pour notre travail. 

Nous avons importé le modèle de données et nous devons enregistrer le nouveau DbContext avant de pouvoir l’utiliser. 

Enregistrez le nouveau DbContext avec l’injection de dépendances

Le modèle de configuration d'ASP.NET Core est flexible. Il permet d’enregistrer la chaîne de connexion qui est dans le fichier appsettings.json en tant que variable d’environnement, dans le magasin de secrets de l’utilisateur, ou toute autre source de configuration. Conformément aux bonnes pratiques de Microsoft, nous allons enregistrer les configurations de notre fournisseur de base de données dans Startup.cs et nos chaînes de connexion dans appsettings.json.

Pour ce faire :

  1. Ouvrez le fichier Data\MesRecettes2Context.cs.

  2. Vérifiez que le constructeur suivant est présent. S’il n’y est pas, ajoutez-le :

public MesRecettes2Context(DbContextOptions<MesRecettesDB2Context> options) : base(options)
{
}

Ce constructeur permet de passer la configuration dans le contexte à travers l’injection de dépendance.

3. Trouvez la méthode  OnConfiguring  . Vous verrez un avertissement au milieu du code de la méthode, qui se lit comme suit :
Pour protéger les informations potentiellement sensibles de votre chaîne de connexion, vous devez la déplacer hors du code source. Consultez la pages qui traite des chaînes de connexion sur le site de Microsoft pour obtenir des conseils sur le stockage des chaînes de connexion.
La chaîne de connexion de votre base de données se trouve actuellement dans votre code généré automatiquement, au niveau de la méthode  OnConfiguring , juste en dessous de ce message. Lorsque la chaîne de connexion fait référence à une base de données sur un serveur distant, elle peut contenir les identifiants de l’authentification. Pour assurer la sécurité de ces informations, il est recommandé de les supprimer du code source où elles se trouvent actuellement. Il est préférable de les placer dans le fichier appsettings.json, comme indiqué ci-dessous. Vous pouvez supprimer le message ci-dessus et le code de la chaîne de connexion de votre classe dbcontext . 

4. Ouvrez appsettings.json et ajoutez la chaîne de connexion pour votre nouvelle base de données :

{
   "ConnectionStrings": {
      "DefaultConnection":"Server=le-nom-du-serveur;
      Database=your-database-name;Trusted_Connection=True;"
   },
   "Logging": {
      "LogLevel": {
         "Default": "Warning"
      }
   },
   "AllowedHosts": "*"
}

5. Ouvrez maintenant le fichier Startup.cs.

6. Ajoutez les instructions using suivantes au début du fichier :

using MesRecettes2.Data;

using Microsoft.EntityFrameworkCore;

7. Trouvez la méthodeConfigureServices et ajoutez le code suivant pour enregistrer votre nouveau  DbContext :

public void ConfigureServices(IServiceCollection services)

{
   services.Configure<CookiePolicyOptions>(options =>
   {
      options.CheckConsentNeeded = context => true;
      options.MinimumSameSitePolicy = SameSiteMode.None;
   });

   // Ajouter MesRecettes2Context
   services.AddDbContext<MesRecettes2Context>(options =>
      options.UseSqlServer(
         Configuration.GetConnectionString("DefaultConnection")));

   services.AddMvc().SetCompatibilityVersion(
      CompatibilityVersion.Version_2_2);
}

Voilà, c’est fait. Vous avez créé un modèle de données complet à partir d’une base de données existante et l’avez enregistré pour l’utiliser avec l’injection de dépendances.

Si vous construisiez une application complète autour de votre modèle de données importé, vous commenceriez à générer automatiquement les contrôleurs et les vues pour les classes de modèle, tout comme vous l’avez fait pour les modèles des migrations code first dans les autres projets MVC. Cependant, nous nous intéressons pour l’instant à la base de données et au modèle entité-association que nous utilisons dans les applications pour interagir avec elle, plutôt qu’à l’application complète.

Nous en avons terminé avec le code du projet.

En résumé

Dans ce chapitre, vous avez fait l’inverse du processus de migration code first. Vous avez utilisé l’intégration database first pour construire un modèle de données C# et un contexte de base de données à partir d’une base de données existante. Ce procédé était moins difficile que vous ne l’auriez imaginé, n’est-ce pas ?

  • Pour cette partie du cours, vous avez créé un nouveau projet MVC dans lequel vous avez généré votre nouveau modèle de données ;

  • En utilisant la console du gestionnaire de packages, vous avez généré automatiquement toutes les classes de modèle et la classe de contexte de base de données avec une seule commande ;

  • Vous avez configuré une chaîne de connexion qui établit une liaison entre votre objet contexte et la base de données réelle ;

  • Enfin, vous avez enregistré votre nouveau contexte de base de données avec Entity Framework afin qu’il puisse être utilisé par le biais de l’injection de dépendances.

Dans le prochain chapitre, nous allons utiliser à nouveau SSMS pour apprendre à créer des procédures stockées, à les intégrer dans une base de données, puis à les exécuter depuis une application Web.

Exemple de certificat de réussite
Exemple de certificat de réussite