Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Note
Dit is niet de nieuwste versie van dit artikel. Zie de .NET 9-versie van dit artikel voor de huidige release.
Warning
Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie het .NET- en .NET Core-ondersteuningsbeleid voor meer informatie. Zie de .NET 9-versie van dit artikel voor de huidige release.
Important
Deze informatie heeft betrekking op een pre-releaseproduct dat aanzienlijk kan worden gewijzigd voordat het commercieel wordt uitgebracht. Microsoft geeft geen garanties, uitdrukkelijk of impliciet, met betrekking tot de informatie die hier wordt verstrekt.
Zie de .NET 9-versie van dit artikel voor de huidige release.
Door Joe Audette
Het RazorPagesMovieContext
-object zorgt voor het verbinden met de database en koppelt Movie
-objecten aan databaserecords. De databasecontext is geregistreerd bij de container Afhankelijkheidsinjectie in 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.")));
Het ASP.NET Core Configuration systeem leest de ConnectionString
sleutel. Voor lokale ontwikkeling haalt de configuratie de verbindingsreeks op uit het appsettings.json
bestand.
De gegenereerde verbindingsreeks is vergelijkbaar met de volgende JSON:
{
"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
In dit artikel wordt een lokale database gebruikt waarvoor de gebruiker niet hoeft te worden geverifieerd. Productie-apps moeten gebruikmaken van de veiligste verificatiestroom die beschikbaar is. Zie Beveiligde verificatiestromenvoor meer informatie over verificatie voor geïmplementeerde test- en productie-apps.
SQL Server Express LocalDB
LocalDB is een lichtgewicht versie van de SQL Server Express-database-engine die is bedoeld voor programmaontwikkeling. LocalDB start op aanvraag en wordt uitgevoerd in de gebruikersmodus, dus er is geen complexe configuratie. Standaard maakt de LocalDB-database *.mdf
bestanden aan in de C:\Users\<user>\
directory.
Vanuit het menu Weergave opent u SQL Server Object Explorer (SSOX).
Klik met de rechtermuisknop op de
Movie
tabel en selecteer Weergaveontwerper:Noteer het sleutelpictogram naast
ID
. Standaard maakt EF een eigenschap met de naamID
voor de primaire sleutel.Klik met de rechtermuisknop op de
Movie
tabel en selecteer Gegevens weergeven:
De database vullen met gegevens
Maak een nieuwe klasse met de naam SeedData
in de map Modellen met de volgende code:
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();
}
}
}
Als er films in de database staan, retourneert de seed initializer en worden er geen films toegevoegd.
if (context.Movie.Any())
{
return;
}
De zaad-initializer toevoegen
Werk de Program.cs
code bij met de volgende gemarkeerde code:
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();
In de vorige code Program.cs
is gewijzigd om het volgende te doen:
- Haal een databasecontextinstantie op uit de container voor afhankelijkheidsinjectie (DI).
- Roep de
seedData.Initialize
methode aan en geef het databasecontext-exemplaar mee. - De context verwijderen wanneer de seed-methode is voltooid. De using-instructie zorgt ervoor dat de context wordt verwijderd.
De volgende uitzondering treedt op wanneer Update-Database
niet is uitgevoerd:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
De app testen
Verwijder alle records in de database, zodat de seed-methode wordt uitgevoerd. Stop en start de app om de database te seeden. Als de database niet is gevuld, zet een onderbrekingspunt op if (context.Movie.Any())
en doorloop de code stap voor stap.
In de app worden de voorgeleverde gegevens weergegeven.
Next steps
Het RazorPagesMovieContext
-object zorgt voor het verbinden met de database en koppelt Movie
-objecten aan databaserecords. De databasecontext is geregistreerd bij de container Afhankelijkheidsinjectie in 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();
Het ASP.NET Core Configuration systeem leest de ConnectionString
sleutel. Voor lokale ontwikkeling haalt de configuratie de verbindingsreeks op uit het appsettings.json
bestand.
De gegenereerde verbindingsreeks is vergelijkbaar met de volgende JSON:
{
"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
In dit artikel wordt een lokale database gebruikt waarvoor de gebruiker niet hoeft te worden geverifieerd. Productie-apps moeten gebruikmaken van de veiligste verificatiestroom die beschikbaar is. Zie Beveiligde verificatiestromenvoor meer informatie over verificatie voor geïmplementeerde test- en productie-apps.
SQL Server Express LocalDB
LocalDB is een lichtgewicht versie van de SQL Server Express-database-engine die is bedoeld voor programmaontwikkeling. LocalDB start op aanvraag en wordt uitgevoerd in de gebruikersmodus, dus er is geen complexe configuratie. Standaard maakt de LocalDB-database *.mdf
bestanden aan in de C:\Users\<user>\
directory.
Vanuit het menu Weergave opent u SQL Server Object Explorer (SSOX).
Klik met de rechtermuisknop op de
Movie
tabel en selecteer Weergaveontwerper:Noteer het sleutelpictogram naast
ID
. Standaard maakt EF een eigenschap met de naamID
voor de primaire sleutel.Klik met de rechtermuisknop op de
Movie
tabel en selecteer Gegevens weergeven:
De database vullen met gegevens
Maak een nieuwe klasse met de naam SeedData
in de map Modellen met de volgende code:
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();
}
}
}
Als er films in de database staan, retourneert de seed initializer en worden er geen films toegevoegd.
if (context.Movie.Any())
{
return;
}
De zaad-initializer toevoegen
Werk de Program.cs
code bij met de volgende gemarkeerde code:
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();
In de vorige code Program.cs
is gewijzigd om het volgende te doen:
- Haal een databasecontextinstantie op uit de container voor afhankelijkheidsinjectie (DI).
- Roep de
seedData.Initialize
methode aan en geef het databasecontext-exemplaar mee. - De context verwijderen wanneer de seed-methode is voltooid. De using-instructie zorgt ervoor dat de context wordt verwijderd.
De volgende uitzondering treedt op wanneer Update-Database
niet is uitgevoerd:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
De app testen
Verwijder alle records in de database, zodat de seed-methode wordt uitgevoerd. Stop en start de app om de database te seeden. Als de database niet is gevuld, zet een onderbrekingspunt op if (context.Movie.Any())
en doorloop de code stap voor stap.
In de app worden de voorgeleverde gegevens weergegeven.
Next steps
Het RazorPagesMovieContext
-object zorgt voor het verbinden met de database en koppelt Movie
-objecten aan databaserecords. De databasecontext is geregistreerd bij de container Afhankelijkheidsinjectie in 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();
Het ASP.NET Core Configuration systeem leest de ConnectionString
sleutel. Voor lokale ontwikkeling haalt de configuratie de verbindingsreeks op uit het appsettings.json
bestand.
De gegenereerde verbindingsreeks is vergelijkbaar met de volgende JSON:
{
"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
In dit artikel wordt een lokale database gebruikt waarvoor de gebruiker niet hoeft te worden geverifieerd. Productie-apps moeten gebruikmaken van de veiligste verificatiestroom die beschikbaar is. Zie Beveiligde verificatiestromenvoor meer informatie over verificatie voor geïmplementeerde test- en productie-apps.
SQL Server Express LocalDB
LocalDB is een lichtgewicht versie van de SQL Server Express-database-engine die is bedoeld voor programmaontwikkeling. LocalDB start op aanvraag en wordt uitgevoerd in de gebruikersmodus, dus er is geen complexe configuratie. Standaard maakt de LocalDB-database *.mdf
bestanden aan in de C:\Users\<user>\
directory.
Vanuit het menu Weergave opent u SQL Server Object Explorer (SSOX).
Klik met de rechtermuisknop op de
Movie
tabel en selecteer Weergaveontwerper:Noteer het sleutelpictogram naast
ID
. Standaard maakt EF een eigenschap met de naamID
voor de primaire sleutel.Klik met de rechtermuisknop op de
Movie
tabel en selecteer Gegevens weergeven:
De database vullen met gegevens
Maak een nieuwe klasse met de naam SeedData
in de map Modellen met de volgende code:
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();
}
}
}
Als er films in de database staan, retourneert de seed initializer en worden er geen films toegevoegd.
if (context.Movie.Any())
{
return;
}
De zaad-initializer toevoegen
Werk de Program.cs
code bij met de volgende gemarkeerde code:
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();
In de vorige code Program.cs
is gewijzigd om het volgende te doen:
- Haal een databasecontextinstantie op uit de container voor afhankelijkheidsinjectie (DI).
- Roep de
seedData.Initialize
methode aan en geef het databasecontext-exemplaar mee. - De context verwijderen wanneer de seed-methode is voltooid. De using-instructie zorgt ervoor dat de context wordt verwijderd.
De volgende uitzondering treedt op wanneer Update-Database
niet is uitgevoerd:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
De app testen
Verwijder alle records in de database, zodat de seed-methode wordt uitgevoerd. Stop en start de app om de database te seeden. Als de database niet is gevuld, zet een onderbrekingspunt op if (context.Movie.Any())
en doorloop de code stap voor stap.
In de app worden de voorgeleverde gegevens weergegeven.
Next steps
Het RazorPagesMovieContext
-object zorgt voor het verbinden met de database en koppelt Movie
-objecten aan databaserecords. De databasecontext is geregistreerd bij de container Afhankelijkheidsinjectie in 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();
Het ASP.NET Core Configuration systeem leest de ConnectionString
sleutel. Voor lokale ontwikkeling haalt de configuratie de verbindingsreeks op uit het appsettings.json
bestand.
De gegenereerde verbindingsreeks is vergelijkbaar met de volgende JSON:
{
"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
In dit artikel wordt een lokale database gebruikt waarvoor de gebruiker niet hoeft te worden geverifieerd. Productie-apps moeten gebruikmaken van de veiligste verificatiestroom die beschikbaar is. Zie Beveiligde verificatiestromenvoor meer informatie over verificatie voor geïmplementeerde test- en productie-apps.
SQL Server Express LocalDB
LocalDB is een lichtgewicht versie van de SQL Server Express-database-engine die is bedoeld voor programmaontwikkeling. LocalDB start op aanvraag en wordt uitgevoerd in de gebruikersmodus, dus er is geen complexe configuratie. Standaard maakt de LocalDB-database *.mdf
bestanden aan in de C:\Users\<user>\
directory.
Vanuit het menu Weergave opent u SQL Server Object Explorer (SSOX).
Klik met de rechtermuisknop op de
Movie
tabel en selecteer Weergaveontwerper:Noteer het sleutelpictogram naast
ID
. Standaard maakt EF een eigenschap met de naamID
voor de primaire sleutel.Klik met de rechtermuisknop op de
Movie
tabel en selecteer Gegevens weergeven:
De database vullen met gegevens
Maak een nieuwe klasse met de naam SeedData
in de map Modellen met de volgende code:
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();
}
}
}
}
Als er films in de database staan, retourneert de seed initializer en worden er geen films toegevoegd.
if (context.Movie.Any())
{
return;
}
De zaad-initializer toevoegen
Werk de Program.cs
code bij met de volgende gemarkeerde code:
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();
In de vorige code Program.cs
is gewijzigd om het volgende te doen:
- Haal een databasecontextinstantie op uit de container voor afhankelijkheidsinjectie (DI).
- Roep de
seedData.Initialize
methode aan en geef het databasecontext-exemplaar mee. - De context verwijderen wanneer de seed-methode is voltooid. De using-instructie zorgt ervoor dat de context wordt verwijderd.
De volgende uitzondering treedt op wanneer Update-Database
niet is uitgevoerd:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
De app testen
Verwijder alle records in de database, zodat de seed-methode wordt uitgevoerd. Stop en start de app om de database te seeden. Als de database niet is gevuld, zet een onderbrekingspunt op if (context.Movie.Any())
en doorloop de code stap voor stap.
In de app worden de voorgeleverde gegevens weergegeven.
Next steps
Voorbeeldcode bekijken of downloaden (hoe u kunt downloaden).
Het RazorPagesMovieContext
-object zorgt voor het verbinden met de database en koppelt Movie
-objecten aan databaserecords. De databasecontext wordt geregistreerd bij de container Afhankelijkheidsinjectie in de ConfigureServices
methode in Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
Het ASP.NET Core Configuration systeem leest de ConnectionString
sleutel. Voor lokale ontwikkeling haalt de configuratie de verbindingsreeks op uit het appsettings.json
bestand.
De gegenereerde verbindingsreeks is vergelijkbaar met de volgende JSON:
{
"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
In dit artikel wordt een lokale database gebruikt waarvoor de gebruiker niet hoeft te worden geverifieerd. Productie-apps moeten gebruikmaken van de veiligste verificatiestroom die beschikbaar is. Zie Beveiligde verificatiestromenvoor meer informatie over verificatie voor geïmplementeerde test- en productie-apps.
SQL Server Express LocalDB
LocalDB is een lichtgewicht versie van de SQL Server Express-database-engine die is bedoeld voor programmaontwikkeling. LocalDB start op aanvraag en wordt uitgevoerd in de gebruikersmodus, dus er is geen complexe configuratie. Standaard maakt de LocalDB-database *.mdf
bestanden aan in de C:\Users\<user>\
directory.
Vanuit het menu Weergave opent u SQL Server Object Explorer (SSOX).
Klik met de rechtermuisknop op de
Movie
tabel en selecteer Weergaveontwerper:Noteer het sleutelpictogram naast
ID
. Standaard maakt EF een eigenschap met de naamID
voor de primaire sleutel.Klik met de rechtermuisknop op de
Movie
tabel en selecteer Gegevens weergeven:
De database vullen met gegevens
Maak een nieuwe klasse met de naam SeedData
in de map Modellen met de volgende code:
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();
}
}
}
}
Als er films in de database staan, retourneert de seed initializer en worden er geen films toegevoegd.
if (context.Movie.Any())
{
return;
}
De zaad-initializer toevoegen
Vervang de inhoud van de Program.cs
code door de volgende code:
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>();
});
}
}
In de vorige code is de Main
methode gewijzigd om het volgende te doen:
- Haal een databasecontextinstantie op uit de container voor afhankelijkheidsinjectie.
- Roep de
seedData.Initialize
methode aan en geef het databasecontext-exemplaar mee. - De context verwijderen wanneer de seed-methode is voltooid. De using-instructie zorgt ervoor dat de context wordt verwijderd.
De volgende uitzondering treedt op wanneer Update-Database
niet is uitgevoerd:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
De app testen
Verwijder alle records in de database. Gebruik de verwijderkoppelingen in de browser of vanuit SSOX
Forceer de app om te initialiseren door de methoden in de
Startup
klasse aan te roepen, zodat de seed-methode wordt uitgevoerd. Als u initialisatie wilt afdwingen, moet IIS Express worden gestopt en opnieuw worden gestart. Stop IIS en start deze opnieuw met een van de volgende methoden:Klik met de rechtermuisknop op het systeemvakpictogram van IIS Express in het meldingsgebied en selecteer Afsluiten of Site stoppen:
Als de app wordt uitgevoerd in de modus voor niet-foutopsporing, drukt u op F5 om uit te voeren in de foutopsporingsmodus.
Als de app zich in de foutopsporingsmodus bevindt, stopt u het foutopsporingsprogramma en drukt u op F5.
In de app worden de voorgeleverde gegevens weergegeven.
Next steps
Voorbeeldcode bekijken of downloaden (hoe u kunt downloaden).
Het RazorPagesMovieContext
-object zorgt voor het verbinden met de database en koppelt Movie
-objecten aan databaserecords. De databasecontext wordt geregistreerd bij de container Afhankelijkheidsinjectie in de ConfigureServices
methode in Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
Het ASP.NET Core Configuration systeem leest de ConnectionString
sleutel. Voor lokale ontwikkeling haalt de configuratie de verbindingsreeks op uit het appsettings.json
bestand.
De gegenereerde verbindingsreeks ziet er ongeveer als volgt uit:
{
"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
In dit artikel wordt een lokale database gebruikt waarvoor de gebruiker niet hoeft te worden geverifieerd. Productie-apps moeten gebruikmaken van de veiligste verificatiestroom die beschikbaar is. Zie Beveiligde verificatiestromenvoor meer informatie over verificatie voor geïmplementeerde test- en productie-apps.
SQL Server Express LocalDB
LocalDB is een lichtgewicht versie van de SQL Server Express-database-engine die is bedoeld voor programmaontwikkeling. LocalDB start op aanvraag en wordt uitgevoerd in de gebruikersmodus, dus er is geen complexe configuratie. Standaard maakt de LocalDB-database *.mdf
bestanden aan in de C:\Users\<user>\
directory.
Vanuit het menu Weergave opent u SQL Server Object Explorer (SSOX).
Klik met de rechtermuisknop op de
Movie
tabel en selecteer Weergaveontwerper:
Noteer het sleutelpictogram naast ID
. Standaard maakt EF een eigenschap met de naam ID
voor de primaire sleutel.
Klik met de rechtermuisknop op de
Movie
tabel en selecteer Gegevens weergeven:
De database vullen met gegevens
Maak een nieuwe klasse met de naam SeedData
in de map Modellen met de volgende code:
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();
}
}
}
}
Als er films in de database staan, retourneert de seed initializer en worden er geen films toegevoegd.
if (context.Movie.Any())
{
return;
}
De zaad-initializer toevoegen
Vervang de inhoud van de Program.cs
code door de volgende code:
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>();
});
}
}
In de vorige code is de Main
methode gewijzigd om het volgende te doen:
- Haal een databasecontextinstantie op uit de container voor afhankelijkheidsinjectie.
- Roep de
seedData.Initialize
methode aan en geef het databasecontext-exemplaar mee. - De context verwijderen wanneer de seed-methode is voltooid. De using-instructie zorgt ervoor dat de context wordt verwijderd.
De volgende uitzondering treedt op wanneer Update-Database
niet is uitgevoerd:
SqlException: Cannot open database "RazorPagesMovieContext-" requested by the login. The login failed.
Login failed for user 'user name'.
De app testen
Verwijder alle records in de database. Gebruik de verwijderkoppelingen in de browser of vanuit SSOX.
Forceer de app om te initialiseren door de methoden in de
Startup
klasse aan te roepen, zodat de seed-methode wordt uitgevoerd. Als u initialisatie wilt afdwingen, moet IIS Express worden gestopt en opnieuw worden gestart. Stop IIS en start deze opnieuw met een van de volgende methoden:Klik met de rechtermuisknop op het IIS Express systeemvakpictogram in het meldingsgebied en klik op Afsluiten of Site stoppen:
- Als de app wordt uitgevoerd in de modus voor niet-foutopsporing, drukt u op F5 om uit te voeren in de foutopsporingsmodus.
- Als de app zich in de foutopsporingsmodus bevindt, stopt u het foutopsporingsprogramma en drukt u op F5.
In de app worden de voorgeleverde gegevens weergegeven.