Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Note
Ceci n’est pas la dernière version de cet article. Pour la version actuelle, consultez la version .NET 10 de cet article.
Warning
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 10 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. Enregistrez le contexte de la base de données dans le 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 le 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"
}
}
Warning
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.
SQL Server Express LocalDB
LocalDB est une version légère du moteur de base de données SQL Server Express conçu 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, LocalDB crée des *.mdf fichiers de base de données dans le C:\Users\<user>\ répertoire.
Dans le menu Affichage, ouvrez l’Explorateur d’objets SQL Server (SSOX).
Faites un clic droit sur la table
Movieet 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éeIDpour la clé primaire.Faites un clic droit sur la table
Movieet sélectionnez Afficher les données :
Peupler 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 initiale retourne et n’ajoute aucun film.
if (context.Movie.Any())
{
return;
}
Ajouter l’initialiseur de seed
Mettez à jour Program.cs avec le code mis en évidence 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, vous modifiez Program.cs pour effectuer les étapes suivantes :
- Créez une étendue de service avec
app.Services.CreateScope(). - Obtenez le fournisseur de services (IServiceProvider) à partir de la portée.
- Appelez la méthode
SeedData.Initializeen lui transmettant le fournisseur de services. - Libérez la portée du service une fois que la méthode d’initialisation est terminée.
L’instruction
usinggarantit que la portée est libérée.
L’exception suivante se produit lorsque vous n’exécutez Update-Databasepas :
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.Login failed for user 'user name'.
Testez l’application
Supprimez tous les enregistrements de la base de données afin que la méthode d'ensemencement s’exécute. Arrêtez et démarrez l’application pour initialiser la base de données. Si la base de données n’est pas initialisée, placez un point d’arrêt sur if (context.Movie.Any()) et 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.")));
Le système de configuration d’ASP.NET Core lit la clé ConnectionString. En développement local, la configuration récupère 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"
}
}
Warning
Cet article utilise une base de données locale qui n’exige pas que l’utilisateur soit authentifié. Les applications de production doivent utiliser le flux d’authentification le plus sécurisé disponible. Pour plus d’informations sur l’authentification des applications déployées de test et de production, consultez Flux d’authentification sécurisés.
SQL Server Express LocalDB
LocalDB est une version allégée du moteur de base de données SQL Server Express, destinée au développement d’applications. 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
Movieet 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éeIDpour la clé primaire.Faites un clic droit sur la table
Movieet sélectionnez Afficher les données :
Peupler 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 données initiales s’arrête et aucun film n’est ajouté.
if (context.Movie.Any())
{
return;
}
Ajouter l’initialiseur de seed
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 :
- Créez une portée de service avec
app.Services.CreateScope(). - Obtenez le fournisseur de services (IServiceProvider) à partir de la portée.
- Appelez la méthode
SeedData.Initialize, en lui passant le fournisseur de services. - Supprimez l’étendue du service une fois la méthode initiale terminée.
L’instruction
usinggarantit que la portée est libérée.
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 initialiser la base de données. Si la base de données n’est pas initialisée, placez un point d’arrêt sur if (context.Movie.Any()) et parcourez le code.
L’application affiche les données initiales :
É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"
}
}
Warning
Cet article utilise une base de données locale qui n’exige pas que l’utilisateur soit authentifié. Les applications de production doivent utiliser le flux d’authentification le plus sécurisé disponible. Pour plus d’informations sur l’authentification des applications de test et de production déployées, consultez Flux d’authentification sécurisés.
SQL Server Express LocalDB
LocalDB est une version allégée du moteur de base de données SQL Server Express, destinée au développement d’applications. 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
Movieet sélectionnez View Designer :
Notez l’icône de clé en regard de
ID. Par défaut, EF crée une propriété nomméeIDpour la clé primaire.Faites un clic droit sur la table
Movieet sélectionnez Afficher les données :
Peupler 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();
}
}
}
S’il y a déjà des films dans la base de données, l’initialiseur de données de départ s’arrête et aucun film n’est ajouté.
if (context.Movie.Any())
{
return;
}
Ajouter l’initialiseur de graine
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 :
- Créez une portée de service avec
app.Services.CreateScope(). - Obtenez le fournisseur de services (IServiceProvider) à partir de la portée.
- Appelez la méthode
SeedData.Initialize, en lui passant le fournisseur de services. - Supprimez l’étendue du service une fois la méthode initiale terminée.
L’instruction
usinggarantit que la portée est libérée.
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 initialiser la base de données. Si la base de données n’est pas initialisée, placez un point d’arrêt sur if (context.Movie.Any()) et exécutez le code pas à pas.
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"
}
}
Warning
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.
SQL Server Express LocalDB
LocalDB est une version allégée du moteur de base de données SQL Server Express, destinée au 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
Movieet sélectionnez Afficher le concepteur :
Notez l’icône en forme de clé à côté de
ID. Par défaut, EF crée une propriété nomméeIDpour la clé primaire.Faites un clic droit sur la table
Movieet sélectionnez Afficher les données :
Peupler 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 d’amorçage se termine 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 données à partir du conteneur d’injection de dépendances.
- Appelez la méthode
seedData.Initializeen lui transmettant l’instance de contexte de base de données. - Libérez le contexte à la fin de la méthode d’initialisation. L’instruction using garantit que le contexte est libéré.
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 initialiser la base de données. Si la base de données n’est pas initialisée, placez un point d’arrêt sur if (context.Movie.Any()) et parcourez le code.
L’application affiche les données initiales :
É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. En développement local, la configuration récupère 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"
}
}
Warning
Cet article utilise une base de données locale qui n’exige pas que l’utilisateur soit authentifié. 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, destinée au développement d’applications. 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
Movieet 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éeIDpour la clé primaire.Faites un clic droit sur la table
Movieet sélectionnez Afficher les données :
Peupler 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();
}
}
}
}
S’il y a déjà des films dans la base de données, l’initialiseur de données de départ s’arrête et aucun film n’est ajouté.
if (context.Movie.Any())
{
return;
}
Ajouter l’initialiseur de graine
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.Initializeen lui transmettant l’instance de contexte de base de données. - Supprimer le contexte une fois la méthode de seed terminée. L’instruction using garantit que le contexte est libéré.
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 initialiser la base de données. Si la base de données n’est pas initialisée, placez un point d’arrêt sur if (context.Movie.Any()) et exécutez le code pas à pas.
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 enregistré dans le conteneur Dependency Injection 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"
}
}
Warning
Cet article utilise une base de données locale qui n’exige pas que l’utilisateur soit authentifié. 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.
SQL Server Express LocalDB
LocalDB est une version allégée du moteur de base de données SQL Server Express, destinée au 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
Movieet sélectionnez Afficher le concepteur :
Notez l’icône de clé en regard de
ID. Par défaut, EF crée une propriété nomméeIDpour la clé primaire.Faites un clic droit sur la table
Movieet sélectionnez Afficher les données :
Peupler 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 données initiales s’arrête et aucun film n’est ajouté.
if (context.Movie.Any())
{
return;
}
Ajouter l’initialiseur de seed
Remplacez le contenu de 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.Initializeen lui transmettant l’instance de contexte de base de données. - Libérez le contexte à la fin de la méthode d’initialisation. L’instruction using garantit que le contexte est libéré.
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
Forcer l’application à s’initialiser en appelant les méthodes de la classe
Startuppour 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 IIS Express dans la zone de notification, puis sélectionnez Quitter ou 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 en mode débogage, arrêtez le débogueur et appuyez sur F5.
L’application affiche les données initiales :
Étapes suivantes
Consultez ou téléchargez du code exemple (comment télécharger).
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 enregistré dans le conteneur d’injection de dépendances dans la méthode ConfigureServices de 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 sera semblable à ce qui suit :
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesMovieContext": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Warning
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, destinée au développement d’applications. 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
Movieet 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
Movieet sélectionnez Afficher les données :
Peupler 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 données initiales s’arrête et aucun film n’est ajouté.
if (context.Movie.Any())
{
return;
}
Ajouter l’initialiseur de seed
Remplacez le contenu de 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épendances.
- Appelez la méthode
seedData.Initializeen lui passant l’instance de contexte de base de données. - Libérez le contexte une fois la méthode seed terminée. L’instruction using garantit la libération du contexte.
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’initialisation de l’application en appelant les méthodes de la classe
Startup, afin que la méthode d’amorçage s’exécute. Pour forcer l’initialisation, IIS Express doit être arrêté et redémarré. Arrêtez et redémarrez IIS à l’aide de l’une des méthodes suivantes :Cliquez avec le bouton droit sur l’icône de la zone de notification IIS Express dans la zone de notification, puis cliquez 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 s’exécute dans le débogueur, arrêtez le débogueur et appuyez sur F5.
L’application affiche les données de départ :