Partie 4 de la série de tutoriels sur Pages Razor
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.
Par Joe Audette
L’objet RazorPagesMovieContext
gère la tâche de connexion à la base de données et de mappage d’objets Movie
à des enregistrements de la base de données. Le contexte de base de données est inscrit auprès du conteneur d’injection de dépendances dans 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.")));
Le système de configuration d’ASP.NET Core lit la clé ConnectionString
. Pour un développement local, la configuration obtient la chaîne de connexion à partir du fichier appsettings.json
.
La chaîne de connexion générée est similaire au JSON suivant :
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-f2e0482c-952d-4b1c-afe9-a1a3dfe52e55;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
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.
Base de données locale SQL Server Express
LocalDB est une version allégée du moteur de base de données SQL Server Express, qui est ciblée pour le développement de programmes. LocalDB démarre à la demande et s’exécute en mode utilisateur, ce qui n’implique aucune configuration complexe. Par défaut, la base de données LocalDB crée des fichiers *.mdf
dans le répertoire C:\Users\<user>\
.
Dans le menu Affichage, ouvrez l’Explorateur d’objets SQL Server (SSOX).
Faites un clic droit sur la table
Movie
et sélectionnez Concepteur de vues :Notez l’icône de clé en regard de
ID
. Par défaut, EF crée une propriété nomméeID
pour la clé primaire.Faites un clic droit sur la table
Movie
et sélectionnez Afficher les données :
Amorcer la base de données
Créez une classe nommée SeedData
dans le dossier Modèles avec le code suivant :
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
namespace RazorPagesMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new RazorPagesMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<RazorPagesMovieContext>>()))
{
if (context == null || context.Movie == null)
{
throw new ArgumentNullException("Null RazorPagesMovieContext");
}
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
Si la base de données contient des films, l’initialiseur de valeur initiale retourne une valeur et aucun film n’est ajouté.
if (context.Movie.Any())
{
return;
}
Ajouter l’initialiseur de valeur initiale
Mettez à jour Program.cs
avec le code en surbrillance suivant :
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
using RazorPagesMovie.Models;
var builder = WebApplication.CreateBuilder(args);
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();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
app.MapRazorPages();
app.Run();
Dans le code précédent, Program.cs
a été modifié pour effectuer les opérations suivantes :
- Obtenir une instance de contexte de base de données à partir du conteneur d’injection de dépendance.
- Appelez la méthode
seedData.Initialize
en lui transmettant le contexte de base de données de l’instance. - Supprimer le contexte une fois la méthode seed terminée. L’instruction using garantit que le contexte est supprimé.
L’exception suivante se produit lorsque Update-Database
n’a pas été exécuté :
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
Tester l’application
Supprimez tous les enregistrements dans la base de données pour que la méthode seed s’exécute. Arrêtez et démarrez l’application pour amorcer la base de données. Si la base de données n’est pas amorcée, placez un point d’arrêt et if (context.Movie.Any())
parcourez le code.
L’application affiche les données de départ :
Étapes suivantes
L’objet RazorPagesMovieContext
gère la tâche de connexion à la base de données et de mappage d’objets Movie
à des enregistrements de la base de données. Le contexte de base de données est inscrit auprès du conteneur d’injection de dépendances dans 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();
Le système de configuration d’ASP.NET Core lit la clé ConnectionString
. Pour un développement local, la configuration obtient la chaîne de connexion à partir du fichier appsettings.json
.
La chaîne de connexion générée est similaire au JSON suivant :
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
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.
Base de données locale SQL Server Express
LocalDB est une version allégée du moteur de base de données SQL Server Express, qui est ciblée pour le développement de programmes. LocalDB démarre à la demande et s’exécute en mode utilisateur, ce qui n’implique aucune configuration complexe. Par défaut, la base de données LocalDB crée des fichiers *.mdf
dans le répertoire C:\Users\<user>\
.
Dans le menu Affichage, ouvrez l’Explorateur d’objets SQL Server (SSOX).
Faites un clic droit sur la table
Movie
et sélectionnez Concepteur de vues :Notez l’icône de clé en regard de
ID
. Par défaut, EF crée une propriété nomméeID
pour la clé primaire.Faites un clic droit sur la table
Movie
et sélectionnez Afficher les données :
Amorcer la base de données
Créez une classe nommée SeedData
dans le dossier Modèles avec le code suivant :
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
namespace RazorPagesMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new RazorPagesMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<RazorPagesMovieContext>>()))
{
if (context == null || context.Movie == null)
{
throw new ArgumentNullException("Null RazorPagesMovieContext");
}
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
Si la base de données contient des films, l’initialiseur de valeur initiale retourne une valeur et aucun film n’est ajouté.
if (context.Movie.Any())
{
return;
}
Ajouter l’initialiseur de valeur initiale
Mettez à jour Program.cs
avec le code en surbrillance suivant :
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
using RazorPagesMovie.Models;
var builder = WebApplication.CreateBuilder(args);
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();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Dans le code précédent, Program.cs
a été modifié pour effectuer les opérations suivantes :
- Obtenir une instance de contexte de base de données à partir du conteneur d’injection de dépendance.
- Appelez la méthode
seedData.Initialize
en lui transmettant le contexte de base de données de l’instance. - Supprimer le contexte une fois la méthode seed terminée. L’instruction using garantit que le contexte est supprimé.
L’exception suivante se produit lorsque Update-Database
n’a pas été exécuté :
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
Tester l’application
Supprimez tous les enregistrements dans la base de données pour que la méthode seed s’exécute. Arrêtez et démarrez l’application pour amorcer la base de données. Si la base de données n’est pas amorcée, placez un point d’arrêt et if (context.Movie.Any())
parcourez le code.
L’application affiche les données de départ :
Étapes suivantes
L’objet RazorPagesMovieContext
gère la tâche de connexion à la base de données et de mappage d’objets Movie
à des enregistrements de la base de données. Le contexte de base de données est inscrit auprès du conteneur d’injection de dépendances dans 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();
Le système de configuration d’ASP.NET Core lit la clé ConnectionString
. Pour un développement local, la configuration obtient la chaîne de connexion à partir du fichier appsettings.json
.
La chaîne de connexion générée est similaire au JSON suivant :
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
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.
Base de données locale SQL Server Express
LocalDB est une version allégée du moteur de base de données SQL Server Express, qui est ciblée pour le développement de programmes. LocalDB démarre à la demande et s’exécute en mode utilisateur, ce qui n’implique aucune configuration complexe. Par défaut, la base de données LocalDB crée des fichiers *.mdf
dans le répertoire C:\Users\<user>\
.
Dans le menu Affichage, ouvrez l’Explorateur d’objets SQL Server (SSOX).
Faites un clic droit sur la table
Movie
et sélectionnez Concepteur de vues :Notez l’icône de clé en regard de
ID
. Par défaut, EF crée une propriété nomméeID
pour la clé primaire.Faites un clic droit sur la table
Movie
et sélectionnez Afficher les données :
Amorcer la base de données
Créez une classe nommée SeedData
dans le dossier Modèles avec le code suivant :
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
namespace RazorPagesMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new RazorPagesMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<RazorPagesMovieContext>>()))
{
if (context == null || context.Movie == null)
{
throw new ArgumentNullException("Null RazorPagesMovieContext");
}
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
Si la base de données contient des films, l’initialiseur de valeur initiale retourne une valeur et aucun film n’est ajouté.
if (context.Movie.Any())
{
return;
}
Ajouter l’initialiseur de valeur initiale
Mettez à jour Program.cs
avec le code en surbrillance suivant :
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
using RazorPagesMovie.Models;
var builder = WebApplication.CreateBuilder(args);
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();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Dans le code précédent, Program.cs
a été modifié pour effectuer les opérations suivantes :
- Obtenir une instance de contexte de base de données à partir du conteneur d’injection de dépendance.
- Appelez la méthode
seedData.Initialize
en lui transmettant le contexte de base de données de l’instance. - Supprimer le contexte une fois la méthode seed terminée. L’instruction using garantit que le contexte est supprimé.
L’exception suivante se produit lorsque Update-Database
n’a pas été exécuté :
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
Tester l’application
Supprimez tous les enregistrements dans la base de données pour que la méthode seed s’exécute. Arrêtez et démarrez l’application pour amorcer la base de données. Si la base de données n’est pas amorcée, placez un point d’arrêt et if (context.Movie.Any())
parcourez le code.
L’application affiche les données de départ :
Étapes suivantes
L’objet RazorPagesMovieContext
gère la tâche de connexion à la base de données et de mappage d’objets Movie
à des enregistrements de la base de données. Le contexte de base de données est inscrit auprès du conteneur d’injection de dépendances dans 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();
Le système de configuration d’ASP.NET Core lit la clé ConnectionString
. Pour un développement local, la configuration obtient la chaîne de connexion à partir du fichier appsettings.json
.
La chaîne de connexion générée est similaire au JSON suivant :
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
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.
Base de données locale SQL Server Express
LocalDB est une version allégée du moteur de base de données SQL Server Express, qui est ciblée pour le développement de programmes. LocalDB démarre à la demande et s’exécute en mode utilisateur, ce qui n’implique aucune configuration complexe. Par défaut, la base de données LocalDB crée des fichiers *.mdf
dans le répertoire C:\Users\<user>\
.
Dans le menu Affichage, ouvrez l’Explorateur d’objets SQL Server (SSOX).
Faites un clic droit sur la table
Movie
et sélectionnez Concepteur de vues :Notez l’icône de clé en regard de
ID
. Par défaut, EF crée une propriété nomméeID
pour la clé primaire.Faites un clic droit sur la table
Movie
et sélectionnez Afficher les données :
Amorcer la base de données
Créez une classe nommée SeedData
dans le dossier Modèles avec le code suivant :
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
namespace RazorPagesMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new RazorPagesMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<RazorPagesMovieContext>>()))
{
if (context == null || context.Movie == null)
{
throw new ArgumentNullException("Null RazorPagesMovieContext");
}
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
}
Si la base de données contient des films, l’initialiseur de valeur initiale retourne une valeur et aucun film n’est ajouté.
if (context.Movie.Any())
{
return;
}
Ajouter l’initialiseur de valeur initiale
Mettez à jour Program.cs
avec le code en surbrillance suivant :
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
using RazorPagesMovie.Models;
var builder = WebApplication.CreateBuilder(args);
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();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Dans le code précédent, Program.cs
a été modifié pour effectuer les opérations suivantes :
- Obtenir une instance de contexte de base de données à partir du conteneur d’injection de dépendance.
- Appelez la méthode
seedData.Initialize
en lui transmettant le contexte de base de données de l’instance. - Supprimer le contexte une fois la méthode seed terminée. L’instruction using garantit que le contexte est supprimé.
L’exception suivante se produit lorsque Update-Database
n’a pas été exécuté :
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
Tester l’application
Supprimez tous les enregistrements dans la base de données pour que la méthode seed s’exécute. Arrêtez et démarrez l’application pour amorcer la base de données. Si la base de données n’est pas amorcée, placez un point d’arrêt et if (context.Movie.Any())
parcourez le code.
L’application affiche les données de départ :
Étapes suivantes
Affichez ou téléchargez un exemple de code (procédure de téléchargement).
L’objet RazorPagesMovieContext
gère la tâche de connexion à la base de données et de mappage d’objets Movie
à des enregistrements de la base de données. Le contexte de base de données est inscrit auprès du conteneur d’injection de dépendances dans la méthode ConfigureServices
dans Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
Le système de configuration d’ASP.NET Core lit la clé ConnectionString
. Pour un développement local, la configuration obtient la chaîne de connexion à partir du fichier appsettings.json
.
La chaîne de connexion générée est similaire au JSON suivant :
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
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.
Base de données locale SQL Server Express
LocalDB est une version allégée du moteur de base de données SQL Server Express, qui est ciblée pour le développement de programmes. LocalDB démarre à la demande et s’exécute en mode utilisateur, ce qui n’implique aucune configuration complexe. Par défaut, la base de données LocalDB crée des fichiers *.mdf
dans le répertoire C:\Users\<user>\
.
Dans le menu Affichage, ouvrez l’Explorateur d’objets SQL Server (SSOX).
Faites un clic droit sur la table
Movie
et sélectionnez Concepteur de vues :Notez l’icône de clé en regard de
ID
. Par défaut, EF crée une propriété nomméeID
pour la clé primaire.Faites un clic droit sur la table
Movie
et sélectionnez Afficher les données :
Amorcer la base de données
Créez une classe nommée SeedData
dans le dossier Modèles avec le code suivant :
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
using System;
using System.Linq;
namespace RazorPagesMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new RazorPagesMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<RazorPagesMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
}
Si la base de données contient des films, l’initialiseur de valeur initiale retourne une valeur et aucun film n’est ajouté.
if (context.Movie.Any())
{
return;
}
Ajouter l’initialiseur de valeur initiale
Remplacez le contenu du fichier Program.cs
par le code suivant :
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using RazorPagesMovie.Models;
using System;
namespace RazorPagesMovie
{
public class Program
{
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
SeedData.Initialize(services);
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred seeding the DB.");
}
}
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
Dans le code précédent, la méthode Main
a été modifiée pour effectuer les opérations suivantes :
- Obtenir une instance de contexte de base de données à partir du conteneur d’injection de dépendance.
- Appelez la méthode
seedData.Initialize
en lui transmettant le contexte de base de données de l’instance. - Supprimer le contexte une fois la méthode seed terminée. L’instruction using garantit que le contexte est supprimé.
L’exception suivante se produit lorsque Update-Database
n’a pas été exécuté :
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
Tester l’application
Supprimez tous les enregistrements de la base de données. Utilisez les liens de suppression dans le navigateur ou à partir de SSOX
Forcez l’application à s’initialiser en appelant les méthodes de la classe
Startup
pour que la méthode seed s’exécute. Pour forcer l’initialisation, IIS Express doit être arrêté et redémarré. Arrêtez et redémarrez IIS avec l’une des approches suivantes :Cliquez avec le bouton droit sur l’icône de barre d’état système IIS Express dans la zone de notification, puis sélectionner Quitter ou sur Arrêter le site :
Si l’application s’exécute en mode non débogage, appuyez sur F5 pour l’exécuter en mode débogage.
Si l’application est en mode débogage, arrêtez le débogueur et appuyez sur F5.
L’application affiche les données de départ :
Étapes suivantes
Affichez ou téléchargez un exemple de code (procédure de téléchargement).
L’objet RazorPagesMovieContext
gère la tâche de connexion à la base de données et de mappage d’objets Movie
à des enregistrements de la base de données. Le contexte de base de données est inscrit auprès du conteneur d’injection de dépendances dans la méthode ConfigureServices
dans Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
Le système de configuration d’ASP.NET Core lit la clé ConnectionString
. Pour un développement local, la configuration obtient la chaîne de connexion à partir du fichier appsettings.json
.
La chaîne de connexion sera semblable à la sortie suivante :
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
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.
Base de données locale SQL Server Express
LocalDB est une version allégée du moteur de base de données SQL Server Express, qui est ciblée pour le développement de programmes. LocalDB démarre à la demande et s’exécute en mode utilisateur, ce qui n’implique aucune configuration complexe. Par défaut, la base de données LocalDB crée des fichiers *.mdf
dans le répertoire C:\Users\<user>\
.
Dans le menu Affichage, ouvrez l’Explorateur d’objets SQL Server (SSOX).
Faites un clic droit sur la table
Movie
et sélectionnez Concepteur de vues :
Notez l’icône de clé en regard de ID
. Par défaut, EF crée une propriété nommée ID
pour la clé primaire.
Faites un clic droit sur la table
Movie
et sélectionnez Afficher les données :
Amorcer la base de données
Créez une classe nommée SeedData
dans le dossier Modèles avec le code suivant :
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
using System;
using System.Linq;
namespace RazorPagesMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new RazorPagesMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<RazorPagesMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
}
Si la base de données contient des films, l’initialiseur de valeur initiale retourne une valeur et aucun film n’est ajouté.
if (context.Movie.Any())
{
return;
}
Ajouter l’initialiseur de valeur initiale
Remplacez le contenu du fichier Program.cs
par le code suivant :
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using RazorPagesMovie.Models;
using System;
namespace RazorPagesMovie
{
public class Program
{
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
SeedData.Initialize(services);
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred seeding the DB.");
}
}
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
Dans le code précédent, la méthode Main
a été modifiée pour effectuer les opérations suivantes :
- Obtenir une instance de contexte de base de données à partir du conteneur d’injection de dépendance.
- Appelez la méthode
seedData.Initialize
en lui transmettant le contexte de base de données de l’instance. - Supprimer le contexte une fois la méthode seed terminée. L’instruction using garantit que le contexte est supprimé.
L’exception suivante se produit lorsque Update-Database
n’a pas été exécuté :
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
Tester l’application
Supprimez tous les enregistrements de la base de données. Utilisez les liens de suppression dans le navigateur ou à partir de SSOX.
Forcez l’application à s’initialiser en appelant les méthodes de la classe
Startup
pour que la méthode seed s’exécute. Pour forcer l’initialisation, IIS Express doit être arrêté et redémarré. Arrêtez et redémarrez IIS avec l’une des approches suivantes :Cliquez avec le bouton droit sur l’icône de barre d’état système IIS Express dans la zone de notification, puis appuyez sur Quitter ou sur Arrêter le site :
- Si l’application s’exécute en mode non débogage, appuyez sur F5 pour l’exécuter en mode débogage.
- Si l’application est en mode débogage, arrêtez le débogueur et appuyez sur F5.
L’application affiche les données de départ :