Dela via


Del 5, arbeta med en databas i en ASP.NET Core MVC-app

Obs

Det här är inte den senaste versionen av den här artikeln. För den aktuella versionen, se .NET 9-versionen av den här artikeln .

Varning

Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i .NET och .NET Core Support Policy. Den aktuella versionen finns i .NET 9-versionen av denna artikel.

Viktig

Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.

Den aktuella versionen finns i den .NET 9-versionen av den här artikeln.

Av Rick Anderson och Jon P Smith.

MvcMovieContext-objektet hanterar uppgiften att ansluta till databasen och mappa Movie objekt till databasposter. Databaskontexten registreras med containern Dependency Injection i Program.cs-filen:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));

ASP.NET Core Configuration-systemet läser ConnectionString-nyckeln. För lokal utveckling hämtar den anslutningssträngen från appsettings.json-filen:

"ConnectionStrings": {
  "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-4ebefa10-de29-4dea-b2ad-8a8dc6bcf374;Trusted_Connection=True;MultipleActiveResultSets=true"
}

Varning

Den här artikeln använder en lokal databas som inte kräver att användaren autentiseras. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för distribuerade test- och produktionsappar finns i Säkra autentiseringsflöden.

SQL Server Express LocalDB

LocalDB:

  • Är en lätt version av SQL Server Express Database Engine, installerad som standard med Visual Studio.
  • Startar på begäran med hjälp av en anslutningssträng.
  • Är inriktat på programutveckling. Den körs i användarläge, så det finns ingen komplex konfiguration.
  • Som standard skapas .mdf filer i katalogen C:/Users/{user}.

Granska databasen

Öppna SQL Server Object Explorer (SSOX) på menyn Visa.

Högerklicka på tabellen Movie (dbo.Movie) > View Designer

Högerklicka på tabellen Film > Visa designer.

filmtabell öppnad i Designer

Observera nyckelikonen bredvid ID. Som standard gör EF en egenskap med namnet ID den primära nyckeln.

Högerklicka på tabellen Movie> Visa data

Högerklicka på tabellen Film > Visa data.

filmtabellen är öppen och visar tabelldata

Initiera databasen

Skapa en ny klass med namnet SeedData i mappen Models. Ersätt den genererade koden med följande:

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();
        }
    }
}

Om det finns några filmer i databasen returneras startvärdet och inga filmer läggs till.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Lägg till startvärdet för seed

Ersätt innehållet i Program.cs med följande kod. Den nya koden är markerad.

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();

Ta bort alla poster i databasen. Du kan göra detta med borttagningslänkarna i webbläsaren eller från SSOX.

Testa appen. Tvinga appen att initiera och anropa koden i filen Program.cs så att seed-metoden körs. Om du vill framtvinga initiering stänger du kommandotolksfönstret som Visual Studio öppnade och startar om genom att trycka på Ctrl+F5.

Appen visar de data som har matats in.

MVC-filmappen är öppen i Microsoft Edge och visar filmdata

MvcMovieContext-objektet hanterar uppgiften att ansluta till databasen och mappa Movie objekt till databasposter. Databaskontexten registreras med containern Dependency Injection i Program.cs-filen:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

ASP.NET Core Configuration-systemet läser ConnectionString-nyckeln. För lokal utveckling hämtar den anslutningssträngen från appsettings.json-filen:

"ConnectionStrings": {
  "MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}

Varning

Den här artikeln använder en lokal databas som inte kräver att användaren autentiseras. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för distribuerade test- och produktionsappar finns i Säkra autentiseringsflöden.

SQL Server Express LocalDB

LocalDB:

  • Är en lätt version av SQL Server Express Database Engine, installerad som standard med Visual Studio.
  • Startar på begäran med hjälp av en anslutningssträng.
  • Är avsett för programutveckling. Den körs i användarläge, så det finns ingen komplex konfiguration.
  • Som standard skapas .mdf filer i katalogen C:/Users/{user}.

Granska databasen

Öppna SQL Server Object Explorer (SSOX) på menyn Visa.

Högerklicka på tabellen Movie (dbo.Movie) > View Designer

Högerklicka på tabellen Film > Visa Designer.

filmtabell öppnad i Designer

Observera nyckelikonen bredvid ID. Som standard gör EF en egenskap med namnet ID den primära nyckeln.

Högerklicka på tabellen Movie> Visa data

Högerklicka på Filmtabellen > Visa data.

öppen filmtabell som visar tabelldata

Seed databasen

Skapa en ny klass med namnet SeedData i mappen Models. Ersätt den genererade koden med följande:

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();
        }
    }
}

Om det finns några filmer i databasen returneras startvärdet och inga filmer läggs till.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Lägg till startvärde för frö

Ersätt innehållet i Program.cs med följande kod. Den nya koden är markerad.

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();

Ta bort alla poster i databasen. Du kan göra detta med borttagningslänkarna i webbläsaren eller från SSOX.

Testa appen. Tvinga appen att initiera och anropa koden i filen Program.cs så att seed-metoden körs. Om du vill framtvinga initiering stänger du kommandotolksfönstret som Visual Studio öppnade och startar om genom att trycka på Ctrl+F5.

Appen visar de data som har hämtats.

MVC-filmappen är öppen i Microsoft Edge och visar filmdata

MvcMovieContext-objektet hanterar uppgiften att ansluta till databasen och mappa Movie objekt till databasposter. Databaskontexten registreras med containern Dependency Injection i Program.cs-filen:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

ASP.NET Core Configuration-systemet läser ConnectionString-nyckeln. För lokal utveckling hämtar den anslutningssträngen från appsettings.json-filen:

"ConnectionStrings": {
  "MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}

Varning

Den här artikeln använder en lokal databas som inte kräver att användaren autentiseras. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för distribuerade test- och produktionsappar finns i Säkra autentiseringsflöden.

SQL Server Express LocalDB

LocalDB:

  • Är en lätt version av SQL Server Express Database Engine, installerad som standard med Visual Studio.
  • Startar på begäran med hjälp av en anslutningssträng.
  • Är inriktad på programutveckling. Den körs i användarläge, så det finns ingen komplex konfiguration.
  • Som standard skapas .mdf filer i katalogen C:/Users/{user}.

Granska databasen

Öppna SQL Server Object Explorer (SSOX) på menyn Visa.

Högerklicka på tabellen Movie (dbo.Movie) > View Designer

Högerklicka på tabellen Film > Visa designer.

filmtabell öppen i Designer

Observera nyckelikonen bredvid ID. Som standard gör EF en egenskap med namnet ID den primära nyckeln.

Högerklicka på tabellen Movie> Visa data

Högerklicka på filmtabellen > Visa data.

öppen filmtabell som visar tabelldata

Seed databasen

Skapa en ny klass med namnet SeedData i mappen Models. Ersätt den genererade koden med följande:

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();
        }
    }
}

Om det finns några filmer i databasen avslutas initialiseringen och inga filmer läggs till.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

<ett namn=snippet_"si">

Lägg till initierare för seed

Ersätt innehållet i Program.cs med följande kod. Den nya koden är markerad.

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();

Ta bort alla poster i databasen. Du kan göra detta med borttagningslänkarna i webbläsaren eller från SSOX.

Testa appen. Tvinga appen att initiera och anropa koden i filen Program.cs så att seed-metoden körs. Om du vill framtvinga initiering stänger du kommandotolksfönstret som Visual Studio öppnade och startar om genom att trycka på Ctrl+F5.

Appen visar den försådda datan.

MVC-filmappen är öppen i Microsoft Edge och visar filmdata

MvcMovieContext-objektet hanterar uppgiften att ansluta till databasen och mappa Movie objekt till databasposter. Databaskontexten registreras med containern Dependency Injection i Program.cs-filen:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

ASP.NET Core Configuration-systemet läser ConnectionString-nyckeln. För lokal utveckling hämtar den anslutningssträngen från appsettings.json-filen:

"ConnectionStrings": {
  "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-7dc5;Trusted_Connection=True;MultipleActiveResultSets=true"
}

Varning

Den här artikeln använder en lokal databas som inte kräver att användaren autentiseras. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för distribuerade test- och produktionsappar finns i Säkra autentiseringsflöden.

SQL Server Express LocalDB

LocalDB:

  • Är en lätt version av SQL Server Express Database Engine, installerad som standard med Visual Studio.
  • Startar på begäran med hjälp av en anslutningssträng.
  • Är avsedd för programutveckling. Den körs i användarläge, så det finns ingen komplex konfiguration.
  • Som standard skapas .mdf filer i katalogen C:/Users/{user}.

Seed databasen

Skapa en ny klass med namnet SeedData i mappen Models. Ersätt den genererade koden med följande:

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();
            }
        }
    }
}

Om det finns några filmer i databasen returneras startvärdet och inga filmer läggs till.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Lägg till seed-initialiserare

Ersätt innehållet i Program.cs med följande kod. Den nya koden är markerad.

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();

Ta bort alla poster i databasen. Du kan göra detta med borttagningslänkarna i webbläsaren eller från SSOX.

Testa appen. Tvinga appen att initiera och anropa koden i filen Program.cs så att seed-metoden körs. Om du vill framtvinga initiering stänger du kommandotolksfönstret som Visual Studio öppnade och startar om genom att trycka på Ctrl+F5.

Appen visar de data som har hämtats.

MVC-filmappen är öppen i Microsoft Edge och visar filmdata

MvcMovieContext-objektet hanterar uppgiften att ansluta till databasen och mappa Movie objekt till databasposter. Databaskontexten registreras med containern Dependency Injection i metoden ConfigureServices i filen Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();

    services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));
}

ASP.NET Core Configuration-systemet läser ConnectionString-nyckeln. För lokal utveckling hämtar den anslutningssträngen från appsettings.json-filen:

"ConnectionStrings": {
  "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-2;Trusted_Connection=True;MultipleActiveResultSets=true"
}

Varning

Den här artikeln använder en lokal databas som inte kräver att användaren autentiseras. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för distribuerade test- och produktionsappar finns i Säkra autentiseringsflöden.

SQL Server Express LocalDB

LocalDB:

  • Är en lätt version av SQL Server Express Database Engine, installerad som standard med Visual Studio.
  • Startar på begäran med hjälp av en anslutningssträng.
  • Är avsedd för programutveckling. Den körs i användarläge, så det finns ingen komplex konfiguration.
  • Som standard skapas .mdf filer i katalogen C:/Users/{user}.

Granska databasen

Öppna SQL Server Object Explorer (SSOX) på menyn Visa.

Visa meny

Högerklicka på tabellen Movie> View Designer

Högerklicka på tabellen Film > Visa Designer

filmtabell öppen i Designer

Observera nyckelikonen bredvid ID. Som standard gör EF en egenskap med namnet ID den primära nyckeln.

Högerklicka på tabellen Movie> Visa data

Högerklicka på tabellen Filmer > Visa data

Filmtabell öppen som visar tabelldata

Seed databasen

Skapa en ny klass med namnet SeedData i mappen Models. Ersätt den genererade koden med följande:

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();
            }
        }
    }
}

Om databasen innehåller några filmer, returnerar grundinitieraren och inga filmer läggs till.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Lägg till initieraren för seed

Ersätt innehållet i Program.cs med följande kod:

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>();
                });
    }
}

Testa appen.

Ta bort alla poster i databasen. Du kan göra detta med borttagningslänkarna i webbläsaren eller från SSOX.

Tvinga appen att initiera och anropa metoderna i klassen Startup så att seed-metoden körs. För att framtvinga initiering måste IIS Express stoppas och startas om. Du kan göra detta med någon av följande metoder:

  • Högerklicka på ikonen för IIS Express-systemfältet i meddelandefältet och tryck på Avsluta eller Stoppa webbplats:

    IIS Express-systemfältets ikon

    kontextmeny

    • Om du körde VS i icke-felsökningsläge trycker du på F5 för att köra i felsökningsläge
    • Om du körde VS i felsökningsläge stoppar du felsökningsprogrammet och trycker på F5

Appen visar de data som har hämtats.

MVC-filmappen är öppen i Microsoft Edge och visar filmdata