Deel 5: werken met een database in een ASP.NET Core MVC-app
Notitie
Dit is niet de nieuwste versie van dit artikel. Zie de .NET 9-versie van dit artikelvoor de huidige release.
Waarschuwing
Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie de .NET- en .NET Core-ondersteuningsbeleidvoor meer informatie. Zie de .NET 9-versie van dit artikelvoor de huidige release.
Belangrijk
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 artikelvoor de huidige release.
Door Rick Anderson en Jon P Smith.
Het MvcMovieContext
-object neemt de taak op zich om verbinding te maken met de database en Movie
-objecten te koppelen aan databaserecords. De databasecontext is geregistreerd bij de Dependency Injection container in het Program.cs
-bestand:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));
Het ASP.NET Core Configuration systeem leest de ConnectionString
sleutel. Voor lokale ontwikkeling wordt de verbindingsreeks opgehaald uit het appsettings.json
-bestand:
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-4ebefa10-de29-4dea-b2ad-8a8dc6bcf374;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Waarschuwing
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 standaard is geïnstalleerd met Visual Studio.
- Start op aanvraag met behulp van een verbindingsreeks.
- Is gericht op programmaontwikkeling. Deze wordt uitgevoerd in de gebruikersmodus, dus er is geen complexe configuratie.
- Standaard maakt het .mdf bestanden aan in de map C:/Users/{user}.
De database onderzoeken
Open in het menu WeergaveSQL Server Object Explorer (SSOX).
Klik met de rechtermuisknop op de Movie
tabel (dbo.Movie
) > Weergaveontwerper
Noteer het sleutelpictogram naast ID
. Standaard stelt EF een eigenschap met de naam ID
in als de primaire sleutel.
Klik met de rechtermuisknop op de Movie
tabel > Gegevens weergeven
De database vullen
Maak een nieuwe klasse met de naam SeedData
in de map Models. Vervang de gegenereerde code door het volgende:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// 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; // DB has been seeded.
}
De zaad-initializer toevoegen
Vervang de inhoud van Program.cs
door de volgende code. De nieuwe code is gemarkeerd.
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
Verwijder alle records in de database. U kunt dit doen met de verwijderkoppelingen in de browser of vanuit SSOX.
Test de app. Dwing de app om te initialiseren door de code in het Program.cs
-bestand aan te roepen, zodat de seed-methode wordt uitgevoerd. Als u initialisatie wilt afdwingen, sluit u het opdrachtpromptvenster dat Visual Studio heeft geopend en start u opnieuw door op Ctrl+F5 te drukken.
In de app worden de gezaaide gegevens weergegeven.
Het MvcMovieContext
-object regelt de verbinding met de database en wijst Movie
-objecten aan databaserecords toe. De context van de database is geregistreerd bij de Dependency Injection-container in het Program.cs
-bestand.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
Het ASP.NET Core Configuration systeem leest de ConnectionString
sleutel. Voor lokale ontwikkeling wordt de verbindingsreeks opgehaald uit het appsettings.json
-bestand:
"ConnectionStrings": {
"MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}
Waarschuwing
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 standaard is geïnstalleerd met Visual Studio.
- Starten op aanvraag met behulp van een connectiestring.
- Is gericht op programmaontwikkeling. Deze wordt uitgevoerd in de gebruikersmodus, dus er is geen complexe configuratie.
- Standaard worden .mdf-bestanden aangemaakt in de map C:/Users/{user}.
De database onderzoeken
Vanuit het menu Weergave opent u Objectverkenner voor SQL Server (SSOX).
Klik met de rechtermuisknop op de Movie
tabel (dbo.Movie
) > Ontwerper weergeven
Noteer het sleutelpictogram naast ID
. Standaard stelt EF een eigenschap met de naam ID
in als de primaire sleutel.
Klik met de rechtermuisknop op de Movie
tabel > Gegevens weergeven
De database initiëren
Maak een nieuwe klasse met de naam SeedData
in de map Models. Vervang de gegenereerde code door het volgende:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// 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; // DB has been seeded.
}
De seed initializer toevoegen
Vervang de inhoud van Program.cs
door de volgende code. De nieuwe code is gemarkeerd.
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
Verwijder alle records in de database. U kunt dit doen met de verwijderkoppelingen in de browser of vanuit SSOX.
Test de app. Dwing de app om te initialiseren door de code in het Program.cs
-bestand aan te roepen, zodat de seed-methode wordt uitgevoerd. Als u initialisatie wilt afdwingen, sluit u het opdrachtpromptvenster dat Visual Studio heeft geopend en start u opnieuw door op Ctrl+F5 te drukken.
In de app worden de ingevoerde gegevens weergegeven.
Het MvcMovieContext
-object voert de taak uit om verbinding te maken met de database en om Movie
-objecten te koppelen aan databasevermeldingen. De databasecontext is geregistreerd bij de Dependency Injection container in het Program.cs
bestand.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
Het ASP.NET Core Configuration systeem leest de ConnectionString
sleutel. Voor lokale ontwikkeling wordt de verbindingsreeks opgehaald uit het appsettings.json
-bestand:
"ConnectionStrings": {
"MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}
Waarschuwing
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 standaard is geïnstalleerd met Visual Studio.
- Start op aanvraag met behulp van een connectiestring.
- Is gericht op programmaontwikkeling. Deze wordt uitgevoerd in de gebruikersmodus, dus er is geen complexe configuratie.
- Standaard maakt .mdf bestanden in de C:/Users/{user} map.
De database onderzoeken
Open in het menu Weergave, SQL Server Object Explorer (SSOX).
Klik met de rechtermuisknop op de Movie
tabel (dbo.Movie
) > Ontwerpweergave
Noteer het sleutelpictogram naast ID
. Standaard maakt EF een eigenschap die ID
heet tot de primaire sleutel.
Klik met de rechtermuisknop op de Movie
tabel > Gegevens weergeven
De database vullen
Maak een nieuwe klasse met de naam SeedData
in de map Models. Vervang de gegenereerde code door het volgende:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// 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; // DB has been seeded.
}
<a name=snippet_"si">
De seed-initializer toevoegen
Vervang de inhoud van Program.cs
door de volgende code. De nieuwe code is gemarkeerd.
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
Verwijder alle records in de database. U kunt dit doen met de verwijderkoppelingen in de browser of vanuit SSOX.
Test de app. Dwing de app om te initialiseren door de code in het Program.cs
-bestand aan te roepen, zodat de seed-methode wordt uitgevoerd. Als u initialisatie wilt afdwingen, sluit u het opdrachtpromptvenster dat Visual Studio heeft geopend en start u opnieuw door op Ctrl+F5 te drukken.
In de app worden de gezaaide gegevens weergegeven.
Het MvcMovieContext
-object beheert de taak om verbinding te maken met de database en Movie
-objecten te koppelen aan databaserecords. De databasecontext is geregistreerd bij de Dependency Injection-container in het Program.cs
-bestand.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
Het ASP.NET Core Configuration systeem leest de ConnectionString
sleutel. Voor lokale ontwikkeling wordt de verbindingsreeks opgehaald uit het appsettings.json
-bestand:
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-7dc5;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Waarschuwing
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 (een lichte versie van SQL Server voor ontwikkelaars)
LocalDB:
- Is een lichtgewicht versie van de SQL Server Express Database Engine die standaard is geïnstalleerd met Visual Studio.
- Start op verzoek met behulp van een connectiestring.
- Is gericht op programmaontwikkeling. Deze wordt uitgevoerd in de gebruikersmodus, dus er is geen complexe configuratie.
- Standaard creëert het .mdf bestanden in de C:/Users/{user} directory.
De database initialiseren
Maak een nieuwe klasse met de naam SeedData
in de map Models. Vervang de gegenereerde code door het volgende:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// 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; // DB has been seeded.
}
De seed initializer toevoegen
Vervang de inhoud van Program.cs
door de volgende code. De nieuwe code is gemarkeerd.
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
Verwijder alle records in de database. U kunt dit doen met de verwijderkoppelingen in de browser of vanuit SSOX.
Test de app. Dwing de app om te initialiseren door de code in het Program.cs
-bestand aan te roepen, zodat de seed-methode wordt uitgevoerd. Als u initialisatie wilt afdwingen, sluit u het opdrachtpromptvenster dat Visual Studio heeft geopend en start u opnieuw door op Ctrl+F5 te drukken.
In de app worden de gezaaide gegevens weergegeven.
Het MvcMovieContext
-object voert de taak uit om verbinding te maken met de database en om Movie
-objecten toe te wijzen aan databaserecords. De databasecontext wordt geregistreerd in de afhankelijkheidsinjectie container in de ConfigureServices
methode in het bestand Startup.cs
.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));
}
Het ASP.NET Core Configuration systeem leest de ConnectionString
sleutel. Voor lokale ontwikkeling wordt de verbindingsreeks opgehaald uit het appsettings.json
-bestand:
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-2;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Waarschuwing
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 standaard is geïnstalleerd met Visual Studio.
- Het start op aanvraag door gebruik te maken van een verbindingsreeks.
- Is gericht op programmaontwikkeling. Deze wordt uitgevoerd in de gebruikersmodus, dus er is geen complexe configuratie.
- Er worden standaard .mdf bestanden gemaakt in de C:/Users/{user} map.
De database onderzoeken
Open vanuit het menu Weergave de SQL Server Object Explorer (SSOX).
Klik met de rechtermuisknop op de Movie
tabel > View Designer
Noteer het sleutelpictogram naast ID
. Standaard maakt EF een eigenschap genaamd ID
tot de primaire sleutel.
Klik met de rechtermuisknop op de Movie
tabel > Gegevens weergeven
De database initialiseren
Maak een nieuwe klasse met de naam SeedData
in de map Models. Vervang de gegenereerde code door het volgende:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// 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; // DB has been seeded.
}
De seed-initializer toevoegen
Vervang de inhoud van Program.cs
door de volgende code:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using MvcMovie.Data;
using MvcMovie.Models;
using System;
namespace MvcMovie
{
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>();
});
}
}
Test de app.
Verwijder alle records in de database. U kunt dit doen met de verwijderkoppelingen in de browser of vanuit SSOX.
Dwing de app om te initialiseren, waarbij de methoden in de klasse Startup
worden aangeroepen, zodat de seed-methode wordt uitgevoerd. Als u initialisatie wilt afdwingen, moet IIS Express worden gestopt en opnieuw worden gestart. U kunt dit doen met een van de volgende benaderingen:
Klik met de rechtermuisknop op het IIS Express systeemvakpictogram in het meldingsgebied en klik op Afsluiten of Site stoppen:
- Als u VS uitvoert in de modus voor niet-foutopsporing, drukt u op F5 om uit te voeren in de foutopsporingsmodus
- Als u VS in de foutopsporingsmodus uitvoert, stopt u het foutopsporingsprogramma en drukt u op F5
In de app worden de vooraf ingevulde gegevens weergegeven.