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. Den aktuella versionen finns i .NET 10-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. För den aktuella versionen, se .NET 9-versionen av den här artikeln .

Av Rick Anderson och Jon P Smith.

Introduction

Den här delen av självstudieserien fokuserar på att arbeta med en SQL-databas i ditt ASP.NET Core MVC-program.

Du får lära dig att:

  • Registrera och konfigurera Entity Framework Core-databaskontexten för din ASP.NET Core MVC-app.
  • Arbeta med databasanslutningssträngar för lokal utveckling.
  • Använd SQL Server Express LocalDB för utveckling och granska din databas och dina data med SQL Server Object Explorer.
  • Fyll din databas med inledande exempeldata.

Förutsättning

I den här självstudien används en databas som du konfigurerade i föregående steg: Del 4, lägg till en modell i en ASP.NET Core MVC-app.

Arbeta med databaskontexten

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

Introduction

Den här delen av självstudieserien fokuserar på att arbeta med en SQL-databas i ditt ASP.NET Core MVC-program.

Du får lära dig att:

  • Registrera och konfigurera Entity Framework Core-databaskontexten för din ASP.NET Core MVC-app.
  • Arbeta med databasanslutningssträngar för lokal utveckling.
  • Använd SQL Server Express LocalDB för utveckling och granska din databas och dina data med SQL Server Object Explorer.
  • Fyll din databas med inledande exempeldata.

Förutsättning

I den här självstudien används en databas som du konfigurerade i föregående steg: Del 4, lägg till en modell i en ASP.NET Core MVC-app.

Arbeta med databaskontexten

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

// 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 matats in.

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

Introduction

Den här delen av självstudieserien fokuserar på att arbeta med en SQL-databas i ditt ASP.NET Core MVC-program.

Du får lära dig att:

  • Registrera och konfigurera Entity Framework Core-databaskontexten för din ASP.NET Core MVC-app.
  • Arbeta med databasanslutningssträngar för lokal utveckling.
  • Använd SQL Server Express LocalDB för utveckling och granska din databas och dina data med SQL Server Object Explorer.
  • Fyll din databas med inledande exempeldata.

Förutsättning

I den här självstudien används en databas som du konfigurerade i föregående steg: Del 4, lägg till en modell i en ASP.NET Core MVC-app.

Arbeta med databaskontexten

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

<ett namn=snippet_"si">

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

// 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 matats in.

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

Introduction

Den här delen av självstudieserien fokuserar på att arbeta med en SQL-databas i ditt ASP.NET Core MVC-program.

Du får lära dig att:

  • Registrera och konfigurera Entity Framework Core-databaskontexten för din ASP.NET Core MVC-app.
  • Arbeta med databasanslutningssträngar för lokal utveckling.
  • Använd SQL Server Express LocalDB för utveckling och granska din databas och dina data med SQL Server Object Explorer.
  • Fyll din databas med inledande exempeldata.

Förutsättning

I den här självstudien används en databas som du konfigurerade i föregående steg: Del 4, lägg till en modell i en ASP.NET Core MVC-app.

Arbeta med databaskontexten

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

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

// 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 matats in.

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

Introduction

Den här delen av självstudieserien fokuserar på att arbeta med en SQL-databas i ditt ASP.NET Core MVC-program.

Du får lära dig att:

  • Registrera och konfigurera Entity Framework Core-databaskontexten för din ASP.NET Core MVC-app.
  • Arbeta med databasanslutningssträngar för lokal utveckling.
  • Använd SQL Server Express LocalDB för utveckling och granska din databas och dina data med SQL Server Object Explorer.
  • Fyll din databas med inledande exempeldata.

Förutsättning

I den här självstudien används en databas som du konfigurerade i föregående steg: Del 4, lägg till en modell i en ASP.NET Core MVC-app.

Arbeta med databaskontexten

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

Visa meny

Högerklicka på tabellen 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 Filmer > 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:

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 matats in.

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