• 8 hours
  • Medium

Free online content available in this course.

course.header.alt.is_certifying

Got it!

Last updated on 6/19/23

Mettez à jour votre base de données avec les migrations code first 

Modifiez le contexte DbContext

Vous avez déjà effectué des migrations code first, mais nous devons encore faire quelques ajouts importants à la classe ApplicationDbContext. Tout d'abord, ajoutez les objets DbSet pour vos classes Film et FilmUtilisateur. Ajoutez les lignes suivantes à la classe ApplicationDbContext, juste après le constructeur :

public DbSet<Film> Films { get; set; }
public DbSet<FilmUtilisateur> FilmsUtilisateur { get; set; }

Remarquez que nous n'avons pas ajouté d'objet DbSet pour la classe Utilisateur. Cela est dû au fait qu'il existe déjà une table AspNetUsers dans la base de données. Puisque nous avons créé la classe Utilisateur qui hérite de la classe IdentityUser, tout ce que vous ajoutez à Utilisateur sera automatiquement traduit dans la table AspNetUsers de la base de données.

La dernière modification est un peu plus délicate. Dans la version actuelle d'ASP.NET Core, il n'est pas possible de migrer automatiquement des objets ayant des relations many-to-many. Heureusement, ASP.NET inclut l'API Fluent. Cette API vous permet de donner à Entity Framework des instructions précises pour créer ou modifier la base de données. Pour ce faire, vous devez remplacer une méthode de votre classe ApplicationDbContext, appelée OnModelCreating, qui est héritée de IdentityDbContext. Vous pouvez le faire n'importe où en dessous du constructeur, dans la classe ApplicationDbContext.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
 base.OnModelCreating(modelBuilder);
   modelBuilder.Entity<FilmUtilisateur>()
   .HasKey(t => new { t.IdUtilisateur, t.IdFilm});
}

Recompilez maintenant le projet et corrigez toute nouvelle erreur.

Mettez à jour ASP.NET Identity

Par défaut, ASP.NET Identity utilise l'objet IdentityUser pour tous les comptes d'utilisateur. Nous avons créé la classe Utilisateur pour étendre la classe IdentityUser et pouvoir donner des informations supplémentaires sur les comptes d'utilisateur. Cependant, puisque nous voulons que la classe Utilisateur soit la base des objets Identity, nous devons encore un peu modifier le code. Les deux fichiers à modifier sont Startup.cs et _LoginPartial.cshtml.

Ouvrez d'abord le fichier Startup.cs. Il se trouve à la racine de votre projet. Cherchez la méthode ConfigureServices. Vers la ligne 41, vous devriez voir le code suivant :

services.AddDefaultIdentity<IdentityUser>()
   .AddDefaultUI(UIFramework.Bootstrap4)
 .AddEntityFrameworkStores<ApplicationDbContext>();

Remplacez ce segment de code par celui-ci :

services.AddIdentity<Utilisateur, IdentityRole>(options =>
{
   options.User.RequireUniqueEmail = false;
})
   .AddDefaultUI(UIFramework.Bootstrap4)
 .AddEntityFrameworkStores<ApplicationDbContext>()
   .AddDefaultTokenProviders();

Remarquez le changement de IdentityUser à Utilisateur dans la configuration du service Identity. Cette modification permettra à .NET Identity d'utiliser votre classe Utilisateur pour tous les processus et services Identity, comme la configuration de UserManager et SignInManager, que nous verrons plus tard dans ce cours.

La deuxième modification doit intervenir dans Views > Shared > _LoginPartial.cshtml. Les trois premières lignes de code de ce fichier sont les suivantes :

@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager

Vous devez ajouter une autre instruction using pour l'espace de noms Data de l'application, puis remplacer les références à IdentityUser par Utilisateur, comme indiqué ci-dessous :

@using Microsoft.AspNetCore.Identity
@using Watchlist.Data
@inject SignInManager<Utilisateur> SignInManager
@inject UserManager<Utilisateur> UserManager

Enregistrez vos modifications et recompilez le projet en corrigeant les éventuelles erreurs de syntaxe.

Effectuez la migration

Maintenant que le contexte de la base de données et le service Identity ont été mis à jour pour utiliser votre classe Utilisateur, le modèle est achevé et peut être migré. Ajoutez une nouvelle migration et nommez-la comme vous le souhaitez, mais n'oubliez pas qu'il est recommandé de lui attribuer un nom représentatif de l'action réalisée ou de son ordre dans la séquence. Vous pouvez l'appeler SecondeMigration ou MigrationFilmUtilisateur, par exemple :

Ajout d'une nouvelle migration dans le Gestionnaire de package
Ajout d'une nouvelle migration dans le Gestionnaire de package
Mise à jour de la base de données dans le Gestionnaire de package
Mise à jour de la base de données dans le Gestionnaire de package

Votre base de données est maintenant à jour et correspond au modèle de données que vous venez de créer, mais vous ne pouvez pas encore faire grand-chose avec. La prochaine étape sera donc de générer automatiquement des contrôleurs et des vues à partir du modèle.

En résumé

Ce chapitre portait sur le paramétrage de la base de données afin de lui permettre de recevoir les données de notre application :

  • Nous avons mis à jour le contexte de la base de données pour qu'il corresponde au modèle de données global.

  • Ensuite, nous avons effectué une migration code first, qui a créé de nouvelles tables dans la base de données correspondant aux classes C# de notre modèle. 

Dans le chapitre suivant, nous allons tirer parti d'un outil puissant, la génération automatique. Il va nous aider à créer les contrôleurs et les vues de notre application Watchlist.

Example of certificate of achievement
Example of certificate of achievement