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
Dans l’Explorateur de solutions, 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.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.
Créez le 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.
Dans la boîte de dialogue Ajouter un nouveau modèle automatique, sélectionnez Pages Razor utilisant Entity Framework (CRUD)>Ajouter.
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).
- Dans la boîte de dialogue Ajouter un contexte de données, le nom de la classe
RazorPagesMovie.Data.RazorPagesMovieContext
est généré. - Dans la liste déroulante Fournisseur de base de données, sélectionnez SQL Server.
- Dans la boîte de dialogue Ajouter un contexte de données, le nom de la classe
- Sélectionnez Ajouter.
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.
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é dansDbContext
. L’argumentInitialCreate
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éthodeUp
dans des migrations qui n’ont pas été appliquées. Dans ce cas, la commande exécute la méthodeUp
dans le fichierMigrations/<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
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.
Testez le lien Créer nouveau.
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.
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
Dans l’Explorateur de solutions, 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.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.
Créez le 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.
Dans la boîte de dialogue Ajouter un nouveau modèle automatique, sélectionnez Pages Razor utilisant Entity Framework (CRUD)>Ajouter.
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).
- Dans la boîte de dialogue Ajouter un contexte de données, le nom de la classe
RazorPagesMovie.Data.RazorPagesMovieContext
est généré. - Dans la liste déroulante Fournisseur de base de données, sélectionnez SQL Server.
- Dans la boîte de dialogue Ajouter un contexte de données, le nom de la classe
- Sélectionnez Ajouter.
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.
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é dansDbContext
. L’argumentInitialCreate
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éthodeUp
dans des migrations qui n’ont pas été appliquées. Dans ce cas, la commande exécute la méthodeUp
dans le fichierMigrations/<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
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.
Testez le lien Créer nouveau.
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.
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
Dans l’Explorateur de solutions, 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.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.
Créez le 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.
Dans la boîte de dialogue Ajouter un nouveau modèle automatique, sélectionnez Pages Razor utilisant Entity Framework (CRUD)>Ajouter.
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).
- Dans la boîte de dialogue Ajouter un contexte de données, le nom de la classe
RazorPagesMovie.Data.RazorPagesMovieContext
est généré. - Dans la liste déroulante Fournisseur de base de données, sélectionnez SQL Server.
- Dans la boîte de dialogue Ajouter un contexte de données, le nom de la classe
- Sélectionnez Ajouter.
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.
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é dansDbContext
. L’argumentInitialCreate
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éthodeUp
dans des migrations qui n’ont pas été appliquées. Dans ce cas, la commande exécute la méthodeUp
dans le fichierMigrations/<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
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.
Testez le lien Créer nouveau.
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.
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
Dans l’Explorateur de solutions, 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.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.
Ajoutez le package NuGet
Microsoft.EntityFrameworkCore.Design
, qui est requis pour l’outil de génération de modèles automatique.- Dans le menu Outils, sélectionnez Gestionnaire de package NuGet>Gérer les packages NuGet pour la solution.
- Sélectionnez l’onglet Parcourir.
- Saisissez
Microsoft.EntityFrameworkCore.Design
, et sélectionnez-le dans la liste. - Cochez Projet, puis sélectionnez Installer
- Sélectionnez J’accepte dans la boîte de dialogue Acceptation de licence.
Créez le 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.
Dans la boîte de dialogue Ajouter un nouveau modèle automatique, sélectionnez Pages Razor utilisant Entity Framework (CRUD)>Ajouter.
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).
- Dans la boîte de dialogue Ajouter un contexte de données, le nom de la classe
RazorPagesMovie.Data.RazorPagesMovieContext
est généré.
- Dans la boîte de dialogue Ajouter un contexte de données, le nom de la classe
- Sélectionnez Ajouter.
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.
Dans le menu Outils, sélectionnez Gestionnaire de package NuGet>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 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
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.
Testez le lien Créer nouveau.
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.
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
Dans l’Explorateur de solutions, 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.
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.
Dans la boîte de dialogue Ajouter une génération de modèles automatique, sélectionnez Pages Razor utilisant Entity Framework (CRUD)>Ajouter.
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).
- Dans la boîte de dialogue Ajouter un contexte de données, le nom de la classe
RazorPagesMovie.Data.RazorPagesMovieContext
est généré.
- Dans la boîte de dialogue Ajouter un contexte de données, le nom de la classe
- Sélectionnez Ajouter.
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.
Dans le menu Outils, sélectionnez Gestionnaire de package NuGet>Console du gestionnaire de package.
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
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.
Testez le lien Créer.
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.
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.
Dans la boîte de dialogue Ajouter une génération de modèles automatique, sélectionnez Pages Razor utilisant Entity Framework (CRUD)>Ajouter.
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.
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.
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.
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.