Delen via


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

klik met de rechtermuisknop op de filmtabel > Weergaveontwerper.

Filmtabel geopend in Designer

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

klik met de rechtermuisknop op de tabel Film > Gegevens weergeven.

Filmtabel geopend met tabelgegevens

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.

MVC Movie-app geopend in Microsoft Edge met filmgegevens

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

klik met de rechtermuisknop op de tabel Films > View Designer.

Filmtabel geopend in Designer

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

klik met de rechtermuisknop op de film tabel > Gegevens bekijken.

Filmtabel geopend met tabelgegevens

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.

MVC Movie-app geopend in Microsoft Edge met filmgegevens

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

Klik met de rechtermuisknop op de filmtabel > View Designer.

Filmtabel geopend in Designer

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

klik met de rechtermuisknop op de Movie-tabel > Gegevens weergeven.

Filmtabel geopend met tabelgegevens

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.

MVC Movie-app geopend in Microsoft Edge met filmgegevens

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.

MVC Movie-app geopend in Microsoft Edge met filmgegevens

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).

Beeldmenu

Klik met de rechtermuisknop op de Movie tabel > View Designer

klik met de rechtermuisknop op de tabel Film > Ontwerpweergave

Filmtabel geopend in 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

Klik met de rechtermuisknop op de tabel Film > Gegevens weergeven

Filmtabel geopend met tabelgegevens

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:

    iis Express-systeemvakpictogram

    contextmenu

    • 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.

MVC Movie-app geopend in Microsoft Edge met filmgegevens