Partager via


Partie 2, ajouter un modèle à une application de pages Razor dans ASP.NET Core

Remarque

Ceci n’est pas la dernière version de cet article. Pour la version actuelle, consultez la version .NET 9 de cet article.

Avertissement

Cette version d’ASP.NET Core n’est plus prise en charge. Pour plus d’informations, consultez la stratégie de support .NET et .NET Core. Pour la version actuelle, consultez la version .NET 9 de cet article.

Important

Ces informations portent sur la préversion du produit, qui est susceptible d’être en grande partie modifié avant sa commercialisation. Microsoft n’offre aucune garantie, expresse ou implicite, concernant les informations fournies ici.

Pour la version actuelle, consultez la version .NET 9 de cet article.

Dans ce tutoriel, des classes sont ajoutées pour la gestion des films dans une base de données. Les classes de modèle de l’application utilisent Entity Framework Core (EF Core) pour travailler avec la base de données. EF Core est un mappeur relationnel d’objets (O/RM) qui simplifie l’accès aux données. Vous écrivez d’abord les classes du modèle, puis EF Core crée la base de données.

Les classes de modèle portent le nom de classes OCT (« Objet CLR Traditionnel »), car elles n’ont pas de dépendances envers EF Core. Elles définissent les propriétés des données stockées dans la base de données.

Ajouter un modèle de données

  1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet RazorPagesMovie>Ajouter>Nouveau dossier. Nommez le dossier Models.

  2. Cliquez avec le bouton droit sur le dossier Models. Sélectionnez Ajouter>Classe. Nommez la classe Movie.

  3. Ajoutez les propriétés suivantes à la classe Movie :

    using System.ComponentModel.DataAnnotations;
    
    namespace RazorPagesMovie.Models;
    
    public class Movie
    {
        public int Id { get; set; }
        public string? Title { get; set; }
        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string? Genre { get; set; }
        public decimal Price { get; set; }
    }
    

La classe Movie contient :

  • Le champ ID est nécessaire à la base de données pour la clé primaire.

  • Attribut [DataType] qui spécifie le type de données dans la propriété ReleaseDate. Avec cet attribut :

    • L’utilisateur n’est pas obligé d’entrer les informations de temps dans le champ de date.
    • Seule la date est affichée, pas les informations de temps.
  • La présence du point d’interrogation après string indique que la propriété peut accepter les valeurs Null. Pour plus d’informations, consultez Types référence pouvant accepter la valeur Null.

Les DataAnnotations sont traitées dans un prochain didacticiel.

Générez le projet pour vérifier qu’il n’y a pas d’erreur de compilation.

Générer automatiquement le modèle de film

Dans cette section, le modèle de film est généré automatiquement. Autrement dit, l’outil de génération de modèles automatique génère des pages pour les opérations de création, de lecture, de mise à jour et de suppression (CRUD) pour le modèle de film.

  1. Créez le dossier Pages/Movies :

    1. Cliquez avec le bouton droit sur le dossier Pages >Ajouter>Nouveau dossier.
    2. Nommez le dossier Movies.
  2. Cliquez avec le bouton droit sur le dossier Pages/Movies >Ajouter>Nouvel élément généré automatiquement.

    Nouvel élément généré automatiquement

  3. Dans la boîte de dialogue Ajouter un nouveau modèle automatique, sélectionnez Pages Razor utilisant Entity Framework (CRUD)>Ajouter.

    Ajouter une structure

  4. Renseignez la boîte de dialogue Ajouter des pages Razor avec Entity Framework (CRUD) :

    1. Dans la liste déroulante Classe de modèle, sélectionnez Film (RazorPagesMovie.Models).
    2. Dans la ligne Classe du contexte de données, sélectionnez le signe + (plus).
      1. Dans la boîte de dialogue Ajouter un contexte de données, le nom de la classe RazorPagesMovie.Data.RazorPagesMovieContext est généré.
      2. Dans la liste déroulante Fournisseur de base de données, sélectionnez SQL Server.
    3. Sélectionnez Ajouter.

    Ajouter des pages Razor

Le fichier appsettings.json est mis à jour avec la chaîne de connexion utilisée pour se connecter à une base de données locale.

Avertissement

Cet article utilise une base de données locale qui ne nécessite pas l’authentification des utilisateurs. Les applications de production doivent utiliser le flux d’authentification le plus sécurisé disponible. Pour plus d’informations sur l’authentification pour les applications de test et de production déployées, consultez Flux d’authentification sécurisés.

Fichiers créés et mis à jour

Le processus de génération de modèles automatique crée les fichiers suivants :

  • Pages/Movies : Create, Delete, Details, Edit, Index.
  • Data/RazorPagesMovieContext.cs

Les fichiers créés sont expliqués dans le tutoriel suivant.

Le processus de génération de modèles automatique ajoute le code en surbrillance suivant au fichier Program.cs :

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();

app.UseRouting();

app.UseAuthorization();

app.MapStaticAssets();
app.MapRazorPages();

app.Run();

Les modifications Program.cs sont expliquées plus loin dans ce tutoriel.

Créer le schéma de base de données initial à l’aide de la fonctionnalité de migration d’EF

La fonctionnalité de migration dans Entity Framework Core permet de :

  • Créer le schéma de base de données initial.
  • Mettre à jour de façon incrémentielle le schéma de base de données afin de le garder synchronisé avec le modèle de données de l’application. Les données existantes dans la base de données sont conservées.

Dans cette section, la fenêtre Console du gestionnaire de package est utilisée pour :

  • Ajouter une migration initiale

  • Mettez à jour la base de données avec la migration initiale.

  • Dans le menu Outils, sélectionnez Gestionnaire de package NuGet>Console du gestionnaire de package.

    Menu Console du Gestionnaire de package

  • Dans la console PMC, entrez la commande suivante :

    Add-Migration InitialCreate
    
  • La commande Add-Migration génère le code nécessaire à la création du schéma de base de données initial. Le schéma est basé sur le modèle spécifié dans DbContext. L’argument InitialCreate est utilisé pour nommer la migration. Vous pouvez utiliser n’importe quel nom, mais par convention, un nom décrivant la migration est sélectionné.

L’avertissement suivant s’affiche et sera traité dans une étape ultérieure :

Aucun type n’a été spécifié pour la colonne décimale 'Price' sur le type d’entité 'Movie'. Les valeurs sont tronquées en mode silencieux si elles ne sont pas compatibles avec la précision et l’échelle par défaut. Spécifiez explicitement le type de colonne SQL Server capable d’accueillir toutes les valeurs en utilisant ’HasColumnType()’.

  • Dans la console PMC, entrez la commande suivante :

    Update-Database
    

    La commande Update-Database exécute la méthode Up dans des migrations qui n’ont pas été appliquées. Dans ce cas, la commande exécute la méthode Up dans le fichier Migrations/<time-stamp>_InitialCreate.cs, ce qui entraîne la création de la base de données.

Contexte de données RazorPagesMovieContext :

  • Dérive de Microsoft.EntityFrameworkCore.DbContext.
  • Spécifie les entités qui sont incluses dans le modèle de données.
  • Coordonne les fonctionnalités EF Core, telles que Créer, Lire, Mettre à jour et Supprimer, pour le modèle Movie.

La classe RazorPagesMovieContext dans le fichier généré Data/RazorPagesMovieContext.cs :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; } = default!;
    }
}

Le code précédent crée une propriété DbSet<Movie> pour le jeu d’entités. Dans la terminologie Entity Framework, un jeu d’entités correspond généralement à une table de base de données. Une entité correspond à une ligne dans la table.

Le nom de la chaîne de connexion est transmis au contexte en appelant une méthode sur un objet DbContextOptions. Pour le développement local, le système de configuration lit la chaîne de connexion à partir du fichier appsettings.json.

Tester l’application

  1. Exécutez l’application et ajoutez /Movies à l’URL dans le navigateur (http://localhost:port/movies).

    Si vous voyez le message d’erreur suivant :

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    Vous avez manqué l’étape des migrations.

  2. Testez le lien Créer nouveau.

    Créer une page

    Remarque

    Vous ne pourrez peut-être pas entrer de virgules décimales dans le champ Price. Pour prendre en charge la validation jQuery pour les paramètres régionaux autres que « Anglais » qui utilisent une virgule (« , ») comme décimale et des formats de date autres que le format « Anglais (États-Unis »), l’application doit être localisée. Pour obtenir des instructions sur la localisation, consultez ce problème GitHub.

  3. Testez les liens Modifier, Détails et Supprimer.

Le prochain didacticiel décrit les fichiers créés par la génération de modèles automatique.

Examiner le contexte inscrit avec l’injection de dépendances

ASP.NET Core comprend l’injection de dépendances. Des services, tels que le contexte de base de données EF Core, sont inscrits avec l’injection de dépendance au démarrage de l’application. Ces services sont affectés aux composants qui les nécessitent (par exemple les Pages Razor) par le biais de paramètres de constructeur. Le code de constructeur qui obtient une instance de contexte de base de données est indiqué plus loin dans le tutoriel.

L’outil de génération de modèles automatique a créé automatiquement un contexte de base de données et l’a inscrit dans le conteneur d’injection de dépendances. Le code mis en surbrillance suivant est ajouté au fichier Program.cs par le générateur de modèles :

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();

app.UseRouting();

app.UseAuthorization();

app.MapStaticAssets();
app.MapRazorPages();

app.Run();

Résolution des problèmes avec l’exemple terminé

Si vous rencontrez un problème que vous ne pouvez pas résoudre, comparez votre code au projet terminé. Afficher ou télécharger le projet terminé (comment télécharger).

Étapes suivantes

Dans ce tutoriel, des classes sont ajoutées pour la gestion des films dans une base de données. Les classes de modèle de l’application utilisent Entity Framework Core (EF Core) pour travailler avec la base de données. EF Core est un mappeur relationnel d’objets (O/RM) qui simplifie l’accès aux données. Vous écrivez d’abord les classes du modèle, puis EF Core crée la base de données.

Les classes de modèle portent le nom de classes OCT (« Objet CLR Traditionnel »), car elles n’ont pas de dépendances envers EF Core. Elles définissent les propriétés des données stockées dans la base de données.

Ajouter un modèle de données

  1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet RazorPagesMovie>Ajouter>Nouveau dossier. Nommez le dossier Models.

  2. Cliquez avec le bouton droit sur le dossier Models. Sélectionnez Ajouter>Classe. Nommez la classe Movie.

  3. Ajoutez les propriétés suivantes à la classe Movie :

    using System.ComponentModel.DataAnnotations;
    
    namespace RazorPagesMovie.Models;
    
    public class Movie
    {
        public int Id { get; set; }
        public string? Title { get; set; }
        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string? Genre { get; set; }
        public decimal Price { get; set; }
    }
    

La classe Movie contient :

  • Le champ ID est nécessaire à la base de données pour la clé primaire.

  • Attribut [DataType] qui spécifie le type de données dans la propriété ReleaseDate. Avec cet attribut :

    • L’utilisateur n’est pas obligé d’entrer les informations de temps dans le champ de date.
    • Seule la date est affichée, pas les informations de temps.
  • La présence du point d’interrogation après string indique que la propriété peut accepter les valeurs Null. Pour plus d’informations, consultez Types référence pouvant accepter la valeur Null.

Les DataAnnotations sont traitées dans un prochain didacticiel.

Générez le projet pour vérifier qu’il n’y a pas d’erreur de compilation.

Générer automatiquement le modèle de film

Dans cette section, le modèle de film est généré automatiquement. Autrement dit, l’outil de génération de modèles automatique génère des pages pour les opérations de création, de lecture, de mise à jour et de suppression (CRUD) pour le modèle de film.

  1. Créez le dossier Pages/Movies :

    1. Cliquez avec le bouton droit sur le dossier Pages >Ajouter>Nouveau dossier.
    2. Nommez le dossier Movies.
  2. Cliquez avec le bouton droit sur le dossier Pages/Movies >Ajouter>Nouvel élément généré automatiquement.

    Nouvel élément généré automatiquement

  3. Dans la boîte de dialogue Ajouter un nouveau modèle automatique, sélectionnez Pages Razor utilisant Entity Framework (CRUD)>Ajouter.

    Ajouter une structure

  4. Renseignez la boîte de dialogue Ajouter des pages Razor avec Entity Framework (CRUD) :

    1. Dans la liste déroulante Classe de modèle, sélectionnez Film (RazorPagesMovie.Models).
    2. Dans la ligne Classe du contexte de données, sélectionnez le signe + (plus).
      1. Dans la boîte de dialogue Ajouter un contexte de données, le nom de la classe RazorPagesMovie.Data.RazorPagesMovieContext est généré.
      2. Dans la liste déroulante Fournisseur de base de données, sélectionnez SQL Server.
    3. Sélectionnez Ajouter.

    Ajouter des pages Razor

Le fichier appsettings.json est mis à jour avec la chaîne de connexion utilisée pour se connecter à une base de données locale.

Avertissement

Cet article utilise une base de données locale qui ne nécessite pas l’authentification des utilisateurs. Les applications de production doivent utiliser le flux d’authentification le plus sécurisé disponible. Pour plus d’informations sur l’authentification pour les applications de test et de production déployées, consultez Flux d’authentification sécurisés.

Fichiers créés et mis à jour

Le processus de génération de modèles automatique crée les fichiers suivants :

  • Pages/Movies : Create, Delete, Details, Edit, Index.
  • Data/RazorPagesMovieContext.cs

Les fichiers créés sont expliqués dans le tutoriel suivant.

Le processus de génération de modèles automatique ajoute le code en surbrillance suivant au fichier Program.cs :

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Les modifications Program.cs sont expliquées plus loin dans ce tutoriel.

Créer le schéma de base de données initial à l’aide de la fonctionnalité de migration d’EF

La fonctionnalité de migration dans Entity Framework Core permet de :

  • Créer le schéma de base de données initial.
  • Mettre à jour de façon incrémentielle le schéma de base de données afin de le garder synchronisé avec le modèle de données de l’application. Les données existantes dans la base de données sont conservées.

Dans cette section, la fenêtre Console du gestionnaire de package est utilisée pour :

  • Ajouter une migration initiale

  • Mettez à jour la base de données avec la migration initiale.

  • Dans le menu Outils, sélectionnez Gestionnaire de package NuGet>Console du gestionnaire de package.

    Menu Console du Gestionnaire de package

  • Dans la console PMC, entrez la commande suivante :

    Add-Migration InitialCreate
    
  • La commande Add-Migration génère le code nécessaire à la création du schéma de base de données initial. Le schéma est basé sur le modèle spécifié dans DbContext. L’argument InitialCreate est utilisé pour nommer la migration. Vous pouvez utiliser n’importe quel nom, mais par convention, un nom décrivant la migration est sélectionné.

L’avertissement suivant s’affiche et sera traité dans une étape ultérieure :

Aucun type n’a été spécifié pour la colonne décimale 'Price' sur le type d’entité 'Movie'. Les valeurs sont tronquées en mode silencieux si elles ne sont pas compatibles avec la précision et l’échelle par défaut. Spécifiez explicitement le type de colonne SQL Server capable d’accueillir toutes les valeurs en utilisant ’HasColumnType()’.

  • Dans la console PMC, entrez la commande suivante :

    Update-Database
    

    La commande Update-Database exécute la méthode Up dans des migrations qui n’ont pas été appliquées. Dans ce cas, la commande exécute la méthode Up dans le fichier Migrations/<time-stamp>_InitialCreate.cs, ce qui entraîne la création de la base de données.

Contexte de données RazorPagesMovieContext :

  • Dérive de Microsoft.EntityFrameworkCore.DbContext.
  • Spécifie les entités qui sont incluses dans le modèle de données.
  • Coordonne les fonctionnalités EF Core, telles que Créer, Lire, Mettre à jour et Supprimer, pour le modèle Movie.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; } = default!;
    }
}

Le code précédent crée une propriété DbSet<Movie> pour le jeu d’entités. Dans la terminologie Entity Framework, un jeu d’entités correspond généralement à une table de base de données. Une entité correspond à une ligne dans la table.

Le nom de la chaîne de connexion est transmis au contexte en appelant une méthode sur un objet DbContextOptions. Pour le développement local, le système de configuration lit la chaîne de connexion à partir du fichier appsettings.json.

Tester l’application

  1. Exécutez l’application et ajoutez /Movies à l’URL dans le navigateur (http://localhost:port/movies).

    Si vous voyez le message d’erreur suivant :

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    Vous avez manqué l’étape des migrations.

  2. Testez le lien Créer nouveau.

    Créer une page

    Remarque

    Vous ne pourrez peut-être pas entrer de virgules décimales dans le champ Price. Pour prendre en charge la validation jQuery pour les paramètres régionaux autres que « Anglais » qui utilisent une virgule (« , ») comme décimale et des formats de date autres que le format « Anglais (États-Unis »), l’application doit être localisée. Pour obtenir des instructions sur la localisation, consultez ce problème GitHub.

  3. Testez les liens Modifier, Détails et Supprimer.

Le prochain didacticiel décrit les fichiers créés par la génération de modèles automatique.

Examiner le contexte inscrit avec l’injection de dépendances

ASP.NET Core comprend l’injection de dépendances. Des services, tels que le contexte de base de données EF Core, sont inscrits avec l’injection de dépendance au démarrage de l’application. Ces services sont affectés aux composants qui les nécessitent (par exemple les Pages Razor) par le biais de paramètres de constructeur. Le code de constructeur qui obtient une instance de contexte de base de données est indiqué plus loin dans le tutoriel.

L’outil de génération de modèles automatique a créé automatiquement un contexte de base de données et l’a inscrit dans le conteneur d’injection de dépendances. Le code mis en surbrillance suivant est ajouté au fichier Program.cs par le générateur de modèles :

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Résolution des problèmes avec l’exemple terminé

Si vous rencontrez un problème que vous ne pouvez pas résoudre, comparez votre code au projet terminé. Afficher ou télécharger le projet terminé (comment télécharger).

Étapes suivantes

Dans ce tutoriel, des classes sont ajoutées pour la gestion des films dans une base de données. Les classes de modèle de l’application utilisent Entity Framework Core (EF Core) pour travailler avec la base de données. EF Core est un mappeur relationnel d’objets (O/RM) qui simplifie l’accès aux données. Vous écrivez d’abord les classes du modèle, puis EF Core crée la base de données.

Les classes de modèle portent le nom de classes OCT (« Objet CLR Traditionnel »), car elles n’ont pas de dépendances envers EF Core. Elles définissent les propriétés des données stockées dans la base de données.

Ajouter un modèle de données

  1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet RazorPagesMovie>Ajouter>Nouveau dossier. Nommez le dossier Models.

  2. Cliquez avec le bouton droit sur le dossier Models. Sélectionnez Ajouter>Classe. Nommez la classe Movie.

  3. Ajoutez les propriétés suivantes à la classe Movie :

    using System.ComponentModel.DataAnnotations;
    
    namespace RazorPagesMovie.Models;
    
    public class Movie
    {
        public int Id { get; set; }
        public string? Title { get; set; }
        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string? Genre { get; set; }
        public decimal Price { get; set; }
    }
    

La classe Movie contient :

  • Le champ ID est nécessaire à la base de données pour la clé primaire.

  • Attribut [DataType] qui spécifie le type de données dans la propriété ReleaseDate. Avec cet attribut :

    • L’utilisateur n’est pas obligé d’entrer les informations de temps dans le champ de date.
    • Seule la date est affichée, pas les informations de temps.
  • La présence du point d’interrogation après string indique que la propriété peut accepter les valeurs Null. Pour plus d’informations, consultez Types référence pouvant accepter la valeur Null.

Les DataAnnotations sont traitées dans un prochain didacticiel.

Générez le projet pour vérifier qu’il n’y a pas d’erreur de compilation.

Générer automatiquement le modèle de film

Dans cette section, le modèle de film est généré automatiquement. Autrement dit, l’outil de génération de modèles automatique génère des pages pour les opérations de création, de lecture, de mise à jour et de suppression (CRUD) pour le modèle de film.

  1. Créez le dossier Pages/Movies :

    1. Cliquez avec le bouton droit sur le dossier Pages >Ajouter>Nouveau dossier.
    2. Nommez le dossier Movies.
  2. Cliquez avec le bouton droit sur le dossier Pages/Movies >Ajouter>Nouvel élément généré automatiquement.

    Nouvel élément généré automatiquement

  3. Dans la boîte de dialogue Ajouter un nouveau modèle automatique, sélectionnez Pages Razor utilisant Entity Framework (CRUD)>Ajouter.

    Ajouter une structure

  4. Renseignez la boîte de dialogue Ajouter des pages Razor avec Entity Framework (CRUD) :

    1. Dans la liste déroulante Classe de modèle, sélectionnez Film (RazorPagesMovie.Models).
    2. Dans la ligne Classe du contexte de données, sélectionnez le signe + (plus).
      1. Dans la boîte de dialogue Ajouter un contexte de données, le nom de la classe RazorPagesMovie.Data.RazorPagesMovieContext est généré.
      2. Dans la liste déroulante Fournisseur de base de données, sélectionnez SQL Server.
    3. Sélectionnez Ajouter.

    Ajouter des pages Razor

Le fichier appsettings.json est mis à jour avec la chaîne de connexion utilisée pour se connecter à une base de données locale.

Avertissement

Cet article utilise une base de données locale qui ne nécessite pas l’authentification des utilisateurs. Les applications de production doivent utiliser le flux d’authentification le plus sécurisé disponible. Pour plus d’informations sur l’authentification pour les applications de test et de production déployées, consultez Flux d’authentification sécurisés.

Fichiers créés et mis à jour

Le processus de génération de modèles automatique crée les fichiers suivants :

  • Pages/Movies : Create, Delete, Details, Edit, Index.
  • Data/RazorPagesMovieContext.cs

Les fichiers créés sont expliqués dans le tutoriel suivant.

Le processus de génération de modèles automatique ajoute le code en surbrillance suivant au fichier Program.cs :

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Les modifications Program.cs sont expliquées plus loin dans ce tutoriel.

Créer le schéma de base de données initial à l’aide de la fonctionnalité de migration d’EF

La fonctionnalité de migration dans Entity Framework Core permet de :

  • Créer le schéma de base de données initial.
  • Mettre à jour de façon incrémentielle le schéma de base de données afin de le garder synchronisé avec le modèle de données de l’application. Les données existantes dans la base de données sont conservées.

Dans cette section, la fenêtre Console du gestionnaire de package est utilisée pour :

  • Ajouter une migration initiale
  • Mettez à jour la base de données avec la migration initiale.
  1. Dans le menu Outils, sélectionnez Gestionnaire de package NuGet>Console du gestionnaire de package.

    Menu Console du Gestionnaire de package

  2. Dans la console du Gestionnaire de package, entrez les commandes suivantes :

    Add-Migration InitialCreate
    Update-Database
    
  • La commande Add-Migration génère le code nécessaire à la création du schéma de base de données initial. Le schéma est basé sur le modèle spécifié dans DbContext. L’argument InitialCreate est utilisé pour nommer la migration. Vous pouvez utiliser n’importe quel nom, mais par convention, un nom décrivant la migration est sélectionné.

  • La commande Update-Database exécute la méthode Up dans des migrations qui n’ont pas été appliquées. Dans ce cas, la commande exécute la méthode Up dans le fichier Migrations/<time-stamp>_InitialCreate.cs, ce qui entraîne la création de la base de données.

L’avertissement suivant s’affiche et sera traité dans une étape ultérieure :

Aucun type n’a été spécifié pour la colonne décimale 'Price' sur le type d’entité 'Movie'. Les valeurs sont tronquées en mode silencieux si elles ne sont pas compatibles avec la précision et l’échelle par défaut. Spécifiez explicitement le type de colonne SQL Server capable d’accueillir toutes les valeurs en utilisant ’HasColumnType()’.

Contexte de données RazorPagesMovieContext :

  • Dérive de Microsoft.EntityFrameworkCore.DbContext.
  • Spécifie les entités qui sont incluses dans le modèle de données.
  • Coordonne les fonctionnalités EF Core, telles que Créer, Lire, Mettre à jour et Supprimer, pour le modèle Movie.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; } = default!;
    }
}

Le code précédent crée une propriété DbSet<Movie> pour le jeu d’entités. Dans la terminologie Entity Framework, un jeu d’entités correspond généralement à une table de base de données. Une entité correspond à une ligne dans la table.

Le nom de la chaîne de connexion est transmis au contexte en appelant une méthode sur un objet DbContextOptions. Pour le développement local, le système de configuration lit la chaîne de connexion à partir du fichier appsettings.json.

Tester l’application

  1. Exécutez l’application et ajoutez /Movies à l’URL dans le navigateur (http://localhost:port/movies).

    Si vous voyez le message d’erreur suivant :

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    Vous avez manqué l’étape des migrations.

  2. Testez le lien Créer nouveau.

    Créer une page

    Remarque

    Vous ne pourrez peut-être pas entrer de virgules décimales dans le champ Price. Pour prendre en charge la validation jQuery pour les paramètres régionaux autres que « Anglais » qui utilisent une virgule (« , ») comme décimale et des formats de date autres que le format « Anglais (États-Unis »), l’application doit être localisée. Pour obtenir des instructions sur la localisation, consultez ce problème GitHub.

  3. Testez les liens Modifier, Détails et Supprimer.

Le prochain didacticiel décrit les fichiers créés par la génération de modèles automatique.

Examiner le contexte inscrit avec l’injection de dépendances

ASP.NET Core comprend l’injection de dépendances. Des services, tels que le contexte de base de données EF Core, sont inscrits avec l’injection de dépendance au démarrage de l’application. Ces services sont affectés aux composants qui les nécessitent (par exemple les Pages Razor) par le biais de paramètres de constructeur. Le code de constructeur qui obtient une instance de contexte de base de données est indiqué plus loin dans le tutoriel.

L’outil de génération de modèles automatique a créé automatiquement un contexte de base de données et l’a inscrit dans le conteneur d’injection de dépendances. Le code mis en surbrillance suivant est ajouté au fichier Program.cs par le générateur de modèles :

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Résolution des problèmes avec l’exemple terminé

Si vous rencontrez un problème que vous ne pouvez pas résoudre, comparez votre code au projet terminé. Afficher ou télécharger le projet terminé (comment télécharger).

Étapes suivantes

Dans ce tutoriel, des classes sont ajoutées pour la gestion des films dans une base de données. Les classes de modèle de l’application utilisent Entity Framework Core (EF Core) pour travailler avec la base de données. EF Core est un mappeur relationnel d’objets (O/RM) qui simplifie l’accès aux données. Vous écrivez d’abord les classes du modèle, puis EF Core crée la base de données.

Les classes de modèle portent le nom de classes OCT (« Objet CLR Traditionnel »), car elles n’ont pas de dépendances envers EF Core. Elles définissent les propriétés des données stockées dans la base de données.

Ajouter un modèle de données

  1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet RazorPagesMovie>Ajouter>Nouveau dossier. Nommez le dossier Models.

  2. Cliquez avec le bouton droit sur le dossier Models. Sélectionnez Ajouter>Classe. Nommez la classe Movie.

  3. Ajoutez les propriétés suivantes à la classe Movie :

    using System.ComponentModel.DataAnnotations;
    
    namespace RazorPagesMovie.Models
    {
        public class Movie
        {
            public int ID { get; set; }
            public string Title { get; set; } = string.Empty;
    
            [DataType(DataType.Date)]
            public DateTime ReleaseDate { get; set; }
            public string Genre { get; set; } = string.Empty;
            public decimal Price { get; set; }
        }
    }
    

La classe Movie contient :

  • Le champ ID est nécessaire à la base de données pour la clé primaire.

  • Attribut [DataType] qui spécifie le type de données dans la propriété ReleaseDate. Avec cet attribut :

    • L’utilisateur n’est pas obligé d’entrer les informations de temps dans le champ de date.
    • Seule la date est affichée, pas les informations de temps.

Les DataAnnotations sont traitées dans un prochain didacticiel.

Générez le projet pour vérifier qu’il n’y a pas d’erreur de compilation.

Générer automatiquement le modèle de film

Dans cette section, le modèle de film est généré automatiquement. Autrement dit, l’outil de génération de modèles automatique génère des pages pour les opérations de création, de lecture, de mise à jour et de suppression (CRUD) pour le modèle de film.

  1. Ajoutez le package NuGet Microsoft.EntityFrameworkCore.Design, qui est requis pour l’outil de génération de modèles automatique.

    1. Dans le menu Outils, sélectionnez Gestionnaire de package NuGet>Gérer les packages NuGet pour la solutionGestionnaire de package NuGet : gérer.
    2. Sélectionnez l’onglet Parcourir.
    3. Saisissez Microsoft.EntityFrameworkCore.Design, et sélectionnez-le dans la liste.
    4. Cochez Projet, puis sélectionnez Installer
    5. Sélectionnez J’accepte dans la boîte de dialogue Acceptation de licence. Gestionnaire de package NuGet : ajouter un package
  2. Créez le dossier Pages/Movies :

    1. Cliquez avec le bouton droit sur le dossier Pages >Ajouter>Nouveau dossier.
    2. Nommez le dossier Movies.
  3. Cliquez avec le bouton droit sur le dossier Pages/Movies >Ajouter>Nouvel élément généré automatiquement.

    Nouvel élément généré automatiquement

  4. Dans la boîte de dialogue Ajouter un nouveau modèle automatique, sélectionnez Pages Razor utilisant Entity Framework (CRUD)>Ajouter.

    Ajouter une structure

  5. Renseignez la boîte de dialogue Ajouter des pages Razor avec Entity Framework (CRUD) :

    1. Dans la liste déroulante Classe de modèle, sélectionnez Film (RazorPagesMovie.Models).
    2. Dans la ligne Classe du contexte de données, sélectionnez le signe + (plus).
      1. Dans la boîte de dialogue Ajouter un contexte de données, le nom de la classe RazorPagesMovie.Data.RazorPagesMovieContext est généré.
    3. Sélectionnez Ajouter.

    Ajouter des pages Razor

    Si vous recevez un message d’erreur indiquant que vous devez installer le package Microsoft.EntityFrameworkCore.SqlServer, répétez les étapes commençant par Ajouter>Nouvel élément généré automatiquement.

Le fichier appsettings.json est mis à jour avec la chaîne de connexion utilisée pour se connecter à une base de données locale.

Avertissement

Cet article utilise une base de données locale qui ne nécessite pas l’authentification des utilisateurs. Les applications de production doivent utiliser le flux d’authentification le plus sécurisé disponible. Pour plus d’informations sur l’authentification pour les applications de test et de production déployées, consultez Flux d’authentification sécurisés.

Fichiers créés et mis à jour

Le processus de génération de modèles automatique crée les fichiers suivants :

  • Pages/Movies : Create, Delete, Details, Edit, Index.
  • Data/RazorPagesMovieContext.cs

Les fichiers créés sont expliqués dans le tutoriel suivant.

Le processus de génération de modèles automatique ajoute le code en surbrillance suivant au fichier Program.cs :

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Les modifications Program.cs sont expliquées plus loin dans ce tutoriel.

Créer le schéma de base de données initial à l’aide de la fonctionnalité de migration d’EF

La fonctionnalité de migration dans Entity Framework Core permet de :

  • Créer le schéma de base de données initial.
  • Mettre à jour de façon incrémentielle le schéma de base de données afin de le garder synchronisé avec le modèle de données de l’application. Les données existantes dans la base de données sont conservées.

Dans cette section, la fenêtre Console du gestionnaire de package est utilisée pour :

  • Ajouter une migration initiale
  • Mettez à jour la base de données avec la migration initiale.
  1. Dans le menu Outils, sélectionnez Gestionnaire de package NuGet>Console du gestionnaire de package.

    Menu Console du Gestionnaire de package

  2. Dans la console du Gestionnaire de package, entrez les commandes suivantes :

    Add-Migration InitialCreate
    Update-Database
    
    

Les commandes précédentes installent les outils Entity Framework Core et exécutent la commande migrations pour générer du code qui crée le schéma de base de données initial.

L’avertissement suivant s’affiche et sera traité dans une étape ultérieure :

Aucun type n’a été spécifié pour la colonne décimale 'Price' sur le type d’entité 'Movie'. Les valeurs sont tronquées en mode silencieux si elles ne sont pas compatibles avec la précision et l’échelle par défaut. Spécifiez explicitement le type de colonne SQL Server capable d’accueillir toutes les valeurs en utilisant ’HasColumnType()’.

La commande migrations génère le code nécessaire à la création du schéma de base de données initial. Le schéma est basé sur le modèle spécifié dans DbContext. L’argument InitialCreate est utilisé pour nommer les migrations. Vous pouvez utiliser n’importe quel nom, mais par convention, un nom décrivant la migration est sélectionné.

La commande update exécute la méthode Up dans des migrations qui n’ont pas été appliquées. Dans ce cas, la commande update exécute la méthode Up dans le fichier Migrations/<time-stamp>_InitialCreate.cs, ce qui entraîne la création de la base de données.

Examiner le contexte inscrit avec l’injection de dépendances

ASP.NET Core comprend l’injection de dépendances. Des services, tels que le contexte de base de données EF Core, sont inscrits avec l’injection de dépendance au démarrage de l’application. Ces services sont affectés aux composants qui les nécessitent (par exemple les Pages Razor) par le biais de paramètres de constructeur. Le code de constructeur qui obtient une instance de contexte de base de données est indiqué plus loin dans le tutoriel.

L’outil de génération de modèles automatique a créé automatiquement un contexte de base de données et l’a inscrit dans le conteneur d’injection de dépendances. Le code mis en surbrillance suivant est ajouté au fichier Program.cs par le générateur de modèles :

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Contexte de données RazorPagesMovieContext :

  • Dérive de Microsoft.EntityFrameworkCore.DbContext.
  • Spécifie les entités qui sont incluses dans le modèle de données.
  • Coordonne les fonctionnalités EF Core, telles que Créer, Lire, Mettre à jour et Supprimer, pour le modèle Movie.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie>? Movie { get; set; }
    }
}

Le code précédent crée une propriété DbSet<Movie> pour le jeu d’entités. Dans la terminologie Entity Framework, un jeu d’entités correspond généralement à une table de base de données. Une entité correspond à une ligne dans la table.

Le nom de la chaîne de connexion est transmis au contexte en appelant une méthode sur un objet DbContextOptions. Pour le développement local, le système de configuration lit la chaîne de connexion à partir du fichier appsettings.json.

Tester l’application

  1. Exécutez l’application et ajoutez /Movies à l’URL dans le navigateur (http://localhost:port/movies).

    Si vous voyez le message d’erreur suivant :

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    Vous avez manqué l’étape des migrations.

  2. Testez le lien Créer nouveau.

    Créer une page

    Remarque

    Vous ne pourrez peut-être pas entrer de virgules décimales dans le champ Price. Pour prendre en charge la validation jQuery pour les paramètres régionaux autres que « Anglais » qui utilisent une virgule (« , ») comme décimale et des formats de date autres que le format « Anglais (États-Unis »), l’application doit être localisée. Pour obtenir des instructions sur la localisation, consultez ce problème GitHub.

  3. Testez les liens Modifier, Détails et Supprimer.

Le prochain didacticiel décrit les fichiers créés par la génération de modèles automatique.

Résolution des problèmes avec l’exemple terminé

Si vous rencontrez un problème que vous ne pouvez pas résoudre, comparez votre code au projet terminé. Afficher ou télécharger le projet terminé (comment télécharger).

Étapes suivantes

Dans cette section, des classes sont ajoutées pour la gestion des films dans une base de données. Les classes de modèle de l’application utilisent Entity Framework Core (EF Core) pour travailler avec la base de données. EF Core est un mappeur relationnel d’objets (O/RM) qui simplifie l’accès aux données. Vous écrivez d’abord les classes du modèle, puis EF Core crée la base de données.

Les classes de modèle portent le nom de classes OCT (« Objet CLR Traditionnel »), car elles n’ont pas de dépendances envers EF Core. Elles définissent les propriétés des données stockées dans la base de données.

Affichez ou téléchargez un exemple de code (procédure de téléchargement).

Ajouter un modèle de données

  1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet RazorPagesMovie>Ajouter>Nouveau dossier. Nommez le dossier Models.

  2. Cliquez avec le bouton droit sur le dossier Models. Sélectionnez Ajouter>Classe. Nommez la classe Movie.

  3. Ajoutez les propriétés suivantes à la classe Movie :

    using System;
    using System.ComponentModel.DataAnnotations;
    
    namespace RazorPagesMovie.Models
    {
        public class Movie
        {
            public int ID { get; set; }
            public string Title { get; set; }
    
            [DataType(DataType.Date)]
            public DateTime ReleaseDate { get; set; }
            public string Genre { get; set; }
            public decimal Price { get; set; }
        }
    }
    

La classe Movie contient :

  • Le champ ID est nécessaire à la base de données pour la clé primaire.

  • [DataType(DataType.Date)] : l’attribut [DataType] spécifie le type de données (Date). Avec cet attribut :

    • L’utilisateur n’est pas obligé d’entrer les informations de temps dans le champ de date.
    • Seule la date est affichée, pas les informations de temps.

Les DataAnnotations sont traitées dans un prochain didacticiel.

Générez le projet pour vérifier qu’il n’y a pas d’erreur de compilation.

Générer automatiquement le modèle de film

Dans cette section, le modèle de film est généré automatiquement. Autrement dit, l’outil de génération de modèles automatique génère des pages pour les opérations de création, de lecture, de mise à jour et de suppression (CRUD) pour le modèle de film.

  1. Créer un dossier Pages/Movies :

    1. Cliquez avec le bouton droit sur le dossier Pages >Ajouter>Nouveau dossier.
    2. Nommez le dossier Movies.
  2. Cliquez avec le bouton droit sur le dossier Pages/Movies >Ajouter>Nouvel élément généré automatiquement.

    Nouvel élément généré automatiquement

  3. Dans la boîte de dialogue Ajouter une génération de modèles automatique, sélectionnez Pages Razor utilisant Entity Framework (CRUD)>Ajouter.

    Ajouter une structure

  4. Renseignez la boîte de dialogue Ajouter des pages Razor avec Entity Framework (CRUD) :

    1. Dans la liste déroulante Classe de modèle, sélectionnez Film (RazorPagesMovie.Models).
    2. Dans la ligne Classe du contexte de données, sélectionnez le signe + (plus).
      1. Dans la boîte de dialogue Ajouter un contexte de données, le nom de la classe RazorPagesMovie.Data.RazorPagesMovieContext est généré.
    3. Sélectionnez Ajouter.

    Ajouter des pages Razor

Le fichier appsettings.json est mis à jour avec la chaîne de connexion utilisée pour se connecter à une base de données locale.

Avertissement

Cet article utilise une base de données locale qui ne nécessite pas l’authentification des utilisateurs. Les applications de production doivent utiliser le flux d’authentification le plus sécurisé disponible. Pour plus d’informations sur l’authentification pour les applications de test et de production déployées, consultez Flux d’authentification sécurisés.

Fichiers créés et mis à jour

Le processus de génération de modèles automatique crée les fichiers suivants :

  • Pages/Movies : Create, Delete, Details, Edit, Index.
  • Data/RazorPagesMovieContext.cs

Fichiers mis à jour

  • Startup.cs

Les fichiers créés et mis à jour sont expliqués dans la section suivante.

Créer le schéma de base de données initial à l’aide de la fonctionnalité de migration d’EF

La fonctionnalité de migration dans Entity Framework Core permet de :

  • Créer le schéma de base de données initial.
  • Mettre à jour de façon incrémentielle le schéma de base de données afin de le garder synchronisé avec le modèle de données de l’application. Les données existantes dans la base de données sont conservées.

Dans cette section, la fenêtre Console du gestionnaire de package est utilisée pour :

  • Ajouter une migration initiale
  • Mettez à jour la base de données avec la migration initiale.
  1. Dans le menu Outils, sélectionnez Gestionnaire de package NuGet>Console du gestionnaire de package.

    Menu Console du Gestionnaire de package

  2. Dans la console du Gestionnaire de package, entrez les commandes suivantes :

    Add-Migration InitialCreate
    Update-Database
    

Pour SQL Server, les commandes précédentes génèrent l’avertissement suivant : « Aucun type n’a été spécifié pour la colonne décimale 'Price' sur le type d’entité 'Movie'. Les valeurs sont tronquées en mode silencieux si elles ne sont pas compatibles avec la précision et l’échelle par défaut. Spécifiez explicitement le type de colonne SQL Server capable d’accueillir toutes les valeurs en utilisant 'HasColumnType()'. »

Ignorez l’avertissement, car il sera traité dans une étape ultérieure.

La commande migrations génère le code nécessaire à la création du schéma de base de données initial. Le schéma est basé sur le modèle spécifié dans DbContext. L’argument InitialCreate est utilisé pour nommer les migrations. Vous pouvez utiliser n’importe quel nom, mais par convention, un nom décrivant la migration est sélectionné.

La commande update exécute la méthode Up dans des migrations qui n’ont pas été appliquées. Dans ce cas, la commande update exécute la méthode Up dans le fichier Migrations/<time-stamp>_InitialCreate.cs, ce qui entraîne la création de la base de données.

Examiner le contexte inscrit avec l’injection de dépendances

ASP.NET Core comprend l’injection de dépendances. Des services, tels que le contexte de base de données EF Core, sont inscrits avec l’injection de dépendance au démarrage de l’application. Ces services sont affectés aux composants qui les nécessitent (par exemple les Pages Razor) par le biais de paramètres de constructeur. Le code de constructeur qui obtient une instance de contexte de base de données est indiqué plus loin dans le tutoriel.

L’outil de génération de modèles automatique a créé automatiquement un contexte de base de données et l’a inscrit dans le conteneur d’injection de dépendances.

Examinez la méthode Startup.ConfigureServices. La ligne en surbrillance a été ajoutée par l’outil de génération de modèles automatique :

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();

    services.AddDbContext<RazorPagesMovieContext>(options =>
      options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}

Le RazorPagesMovieContext coordonne les fonctionnalités EF Core, telles que Créer, Lire, Mettre à jour et Supprimer, pour le modèle Movie. Le contexte de données (RazorPagesMovieContext) est dérivé de Microsoft.EntityFrameworkCore.DbContext. Il spécifie les entités qui sont incluses dans le modèle de données.

using Microsoft.EntityFrameworkCore;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (
            DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
    }
}

Le code précédent crée une propriété DbSet<Movie> pour le jeu d’entités. Dans la terminologie Entity Framework, un jeu d’entités correspond généralement à une table de base de données. Une entité correspond à une ligne dans la table.

Le nom de la chaîne de connexion est transmis au contexte en appelant une méthode sur un objet DbContextOptions. Pour le développement local, le système de configuration lit la chaîne de connexion à partir du fichier appsettings.json.

Tester l’application

  1. Exécutez l’application et ajoutez /Movies à l’URL dans le navigateur (http://localhost:port/movies).

    Si vous voyez le message d’erreur suivant :

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    Vous avez manqué l’étape des migrations.

  2. Testez le lien Créer.

    Créer une page

    Remarque

    Vous ne pourrez peut-être pas entrer de virgules décimales dans le champ Price. Pour prendre en charge la validation jQuery pour les paramètres régionaux autres que « Anglais » qui utilisent une virgule (« , ») comme décimale et des formats de date autres que le format « Anglais (États-Unis »), l’application doit être localisée. Pour obtenir des instructions sur la localisation, consultez ce problème GitHub.

  3. Testez les liens Modifier, Détails et Supprimer.

Journalisation SQL d’Entity Framework Core

La configuration de la journalisation est généralement fournie par la section Logging des fichiers appsettings.{Environment}.json. Pour journaliser les instructions SQL, ajoutez "Microsoft.EntityFrameworkCore.Database.Command": "Information" au fichier appsettings.Development.json :

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDB-2;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
     ,"Microsoft.EntityFrameworkCore.Database.Command": "Information"
    }
  },
  "AllowedHosts": "*"
}

Avec le JSON précédent, les instructions SQL s’affichent dans la ligne de commande et dans la fenêtre de sortie de Visual Studio.

Pour plus d’informations, consultez Journalisation dans .NET Core et ASP.NET Core et ce problème GitHub.

Le prochain didacticiel décrit les fichiers créés par la génération de modèles automatique.

Étapes suivantes

Dans cette section, des classes sont ajoutées pour la gestion des films. Les classes de modèle de l’application utilisent Entity Framework Core (EF Core) pour travailler avec la base de données. EF Core est un mappeur relationnel d’objets (O/RM) qui simplifie l’accès aux données.

Les classes de modèle portent le nom de classes OCT (« Objet CLR Traditionnel »), car elles n’ont pas de dépendances envers EF Core. Elles définissent les propriétés des données stockées dans la base de données.

Affichez ou téléchargez un exemple de code (procédure de téléchargement).

Avertissement

Cet article utilise une base de données locale qui ne nécessite pas l’authentification des utilisateurs. Les applications de production doivent utiliser le flux d’authentification le plus sécurisé disponible. Pour plus d’informations sur l’authentification pour les applications de test et de production déployées, consultez Flux d’authentification sécurisés.

Ajouter un modèle de données

Cliquez avec le bouton droit sur le projet RazorPagesMovie >Ajouter>Nouveau dossier. Nommez le dossier Models.

Cliquez avec le bouton droit sur le dossier Models. Sélectionnez Ajouter>Classe. Nommez la classe Movie.

Ajoutez les propriétés suivantes à la classe Movie :

using System;
using System.ComponentModel.DataAnnotations;

namespace RazorPagesMovie.Models
{
    public class Movie
    {
        public int ID { get; set; }
        public string Title { get; set; }

        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }
        public decimal Price { get; set; }
    }
}

La classe Movie contient :

  • Le champ ID est nécessaire à la base de données pour la clé primaire.

  • [DataType(DataType.Date)] : L’attribut DataType spécifie le type de données (Date). Avec cet attribut :

    • L’utilisateur n’est pas obligé d’entrer les informations de temps dans le champ de date.
    • Seule la date est affichée, pas les informations de temps.

Les DataAnnotations sont traitées dans un prochain didacticiel.

Les DataAnnotations sont traitées dans un prochain didacticiel.

Générez le projet pour vérifier qu’il n’y a pas d’erreur de compilation.

Générer automatiquement le modèle de film

Dans cette section, le modèle de film est généré automatiquement. Autrement dit, l’outil de génération de modèles automatique génère des pages pour les opérations de création, de lecture, de mise à jour et de suppression (CRUD) pour le modèle de film.

Créer un dossier Pages/Movies :

  • Cliquez avec le bouton droit sur le dossier Pages >Ajouter>Nouveau dossier.
  • Nommez le dossier Movies.

Cliquez avec le bouton droit sur le dossier Pages/Movies >Ajouter>Nouvel élément généré automatiquement.

Nouvel élément généré automatiquement sur VScode

Dans la boîte de dialogue Ajouter une génération de modèles automatique, sélectionnez Pages Razor utilisant Entity Framework (CRUD)>Ajouter.

Ajouter une structure sur VScode

Renseignez la boîte de dialogue Ajouter des pages Razor avec Entity Framework (CRUD) :

  • Dans la liste déroulante Classe de modèle, sélectionnez Film (RazorPagesMovie.Models).
  • Dans la ligne Classe du contexte de données, sélectionnez le signe (plus) + et changez le nom généré de RazorPagesMovie.Models.RazorPagesMovieContext en RazorPagesMovie.Data.RazorPagesMovieContext. Cette modification n'est pas requise. Elle crée la classe de contexte de base de données avec l’espace de noms correct.
  • Sélectionnez Ajouter.

Ajouter des pages Razor sur VScode

Le fichier appsettings.json est mis à jour avec la chaîne de connexion utilisée pour se connecter à une base de données locale.

Fichiers créés

Le processus de génération de modèles automatique crée et met à jour les fichiers suivants :

  • Pages/Movies : Create, Delete, Details, Edit, Index.
  • Data/RazorPagesMovieContext.cs

Mis à jour

  • Startup.cs

Les fichiers créés et mis à jour sont expliqués dans la section suivante.

Migration initiale

Dans cette section, la console du gestionnaire de package est utilisée pour :

  • Ajouter une migration initiale
  • Mettez à jour la base de données avec la migration initiale.

Dans le menu Outils, sélectionnez Gestionnaire de package NuGet>Console du gestionnaire de package.

Menu Console du Gestionnaire de package

Dans la console du Gestionnaire de package, entrez les commandes suivantes :

Add-Migration InitialCreate
Update-Database

Les commandes précédentes génèrent l’avertissement suivant : « Aucun type n’a été spécifié pour la colonne décimale 'Price' sur le type d’entité 'Movie'. Les valeurs sont tronquées en mode silencieux si elles ne sont pas compatibles avec la précision et l’échelle par défaut. Spécifiez explicitement le type de colonne SQL Server capable d’accueillir toutes les valeurs en utilisant 'HasColumnType()'. »

Ignorez l’avertissement, car il sera traité dans une étape ultérieure.

La commande de migrations génère le code nécessaire à la création du schéma de base de données initial. Le schéma est basé sur le modèle spécifié dans DbContext. L’argument InitialCreate est utilisé pour nommer les migrations. Vous pouvez utiliser n’importe quel nom, mais par convention, un nom décrivant la migration est sélectionné.

La commande update exécute la méthode Up dans des migrations qui n’ont pas été appliquées. Dans ce cas, update exécute la méthode Up dans le fichier Migrations/<time-stamp>_InitialCreate.cs, ce qui entraîne la création de la base de données.

Examiner le contexte inscrit avec l’injection de dépendances

ASP.NET Core comprend l’injection de dépendances. Des services, tels que le contexte de base de données EF Core, sont inscrits avec l’injection de dépendance au démarrage de l’application. Les composants qui nécessitent ces services, par exemple les pages Razor, sont fournis par le biais de paramètres de constructeur. Le code de constructeur qui obtient une instance de contexte de base de données est indiqué plus loin dans le tutoriel.

L’outil de génération de modèles automatique a créé automatiquement un contexte de base de données et l’a inscrit dans le conteneur d’injection de dépendances.

Examinez la méthode Startup.ConfigureServices. La ligne en surbrillance a été ajoutée par l’outil de génération de modèles automatique :

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();

    services.AddDbContext<RazorPagesMovieContext>(options =>
      options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}

Le RazorPagesMovieContext coordonne les fonctionnalités EF Core, telles que Créer, Lire, Mettre à jour et Supprimer, pour le modèle Movie. Le contexte de données (RazorPagesMovieContext) est dérivé de Microsoft.EntityFrameworkCore.DbContext. Il spécifie les entités qui sont incluses dans le modèle de données.

using Microsoft.EntityFrameworkCore;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (
            DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
    }
}

Le code précédent crée une propriété DbSet<Movie> pour le jeu d’entités. Dans la terminologie Entity Framework, un jeu d’entités correspond généralement à une table de base de données. Une entité correspond à une ligne dans la table.

Le nom de la chaîne de connexion est transmis au contexte en appelant une méthode sur un objet DbContextOptions. Pour le développement local, le système de configuration lit la chaîne de connexion à partir du fichier appsettings.json.

Tester l’application

  • Exécutez l’application et ajoutez /Movies à l’URL dans le navigateur (http://localhost:port/movies).

Si vous obtenez l’erreur :

SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
Login failed for user 'User-name'.

Vous avez manqué l’étape des migrations.

  • Testez le lien Créer.

    Créer une page

    Remarque

    Vous ne pourrez peut-être pas entrer de virgules décimales dans le champ Price. Pour prendre en charge la validation jQuery pour les paramètres régionaux autres que « Anglais » qui utilisent une virgule (« , ») comme décimale et des formats de date autres que le format « Anglais (États-Unis »), l’application doit être localisée. Pour obtenir des instructions sur la localisation, consultez ce problème GitHub.

  • Testez les liens Modifier, Détails et Supprimer.

Le prochain didacticiel décrit les fichiers créés par la génération de modèles automatique.

Étapes suivantes