Training
Module
Een database gebruiken met minimale API, Entity Framework Core en ASP.NET Core - Training
Meer informatie over het toevoegen van een database aan een minimale API-toepassing.
Deze browser wordt niet meer ondersteund.
Upgrade naar Microsoft Edge om te profiteren van de nieuwste functies, beveiligingsupdates en technische ondersteuning.
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.
LocalDB:
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
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.
}
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.
LocalDB:
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
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.
}
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.
LocalDB:
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
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">
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.
LocalDB:
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.
}
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.
LocalDB:
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
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.
}
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:
In de app worden de vooraf ingevulde gegevens weergegeven.
ASP.NET Core-feedback
ASP.NET Core is een open source project. Selecteer een koppeling om feedback te geven:
Training
Module
Een database gebruiken met minimale API, Entity Framework Core en ASP.NET Core - Training
Meer informatie over het toevoegen van een database aan een minimale API-toepassing.