Sdílet prostřednictvím


Část 5– práce s databází v aplikaci ASP.NET Core MVC

Poznámka:

Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 10 tohoto článku.

Varování

Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v zásadách podpory .NET a .NET Core. Pro aktuální verzi tohoto článku viz verzi .NET 9.

Rick Anderson a Jon P Smith.

Úvod

Tato část série kurzů se zaměřuje na práci s databází SQL ve vaší aplikaci ASP.NET Core MVC.

Co se naučíte:

  • Zaregistrujte a nakonfigurujte kontext databáze Entity Framework Core pro vaši aplikaci ASP.NET Core MVC.
  • Práce s připojovacími řetězci databáze pro lokální vývoj
  • K vývoji použijte SQL Server Express LocalDB a prozkoumejte databázi a data pomocí Průzkumníka objektů SQL Serveru.
  • Naplňte svou databázi počátečními vzorovými daty.

Předpoklad

Tento kurz používá databázi, kterou jste nastavili v předchozím kroku: Část 4, přidání modelu do aplikace ASP.NET Core MVC.

Práce s kontextem databáze

Objekt MvcMovieContext zpracovává úlohu připojení k databázi a mapování Movie objektů na záznamy databáze. Kontext databáze je zaregistrovaný v kontejneru pro injektování závislostí v Program.cs souboru.

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

Systém ASP.NET Core Configuration načte ConnectionString klíč. Pro místní vývoj získá připojovací řetězec ze appsettings.json souboru:

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

Varování

Tento článek používá místní databázi, která nevyžaduje ověření uživatele. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování nasazených testovacích a produkčních aplikacích vizte Secure authentication flows.

SQL Server Express LocalDB

LocalDB:

  • Je zjednodušená verze databázového stroje SQL Server Express, která je ve výchozím nastavení nainstalovaná se sadou Visual Studio.
  • Spustí se na vyžádání pomocí připojovacího řetězce.
  • Zaměřuje se na vývoj programů. Běží v uživatelském režimu, takže neexistuje složitá konfigurace.
  • Ve výchozím nastavení vytvoří .mdf soubory v adresáři C:/Users/{user}.

Prozkoumání databáze

V nabídce Zobrazení otevřete SQL Server Průzkumník objektů (SSOX).

Klikněte pravým tlačítkem myši na tabulku Movie (dbo.Movie) a vyberte > Návrhář zobrazení

Klikněte pravým tlačítkem myši na tabulku Film > a zvolte Návrhář zobrazení.

Tabulka filmů otevřená v Návrháři

Poznamenejte si ikonu klávesy vedle IDtlačítka . Ef ve výchozím nastavení vytvoří vlastnost s názvem ID primární klíč.

Klikněte pravým tlačítkem myši na Movie tabulku > Zobrazit data.

Klikněte pravým tlačítkem myši na tabulku Film > a vyberte Zobrazit data.

Otevřená tabulka filmů zobrazující data tabulky

Naplnit databázi

Vytvořte novou třídu pojmenovanou SeedData ve složce Models . Vygenerovaný kód nahraďte následujícím kódem:

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

Pokud jsou v databázi nějaké filmy, počáteční inicializátor se vrátí a žádné filmy nejsou přidány.

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

Přidat inicializátor semen

Nahraďte obsah Program.cs následujícím kódem. Nový kód je zvýrazněný.

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

Odstraňte všechny záznamy v databázi. Můžete to udělat pomocí odkazů pro odstranění v prohlížeči nebo ze služby SSOX.

Otestujete aplikaci. Vynuťte inicializaci aplikace voláním kódu v souboru Program.cs, aby se spustila metoda seed. Pokud chcete vynutit inicializaci, zavřete okno příkazového řádku, které Visual Studio otevřelo, a restartujte stisknutím kombinace kláves Ctrl+F5.

Aplikace zobrazuje osetá data.

Otevřená aplikace MVC Movie v Microsoft Edge zobrazující filmová data

Úvod

Tato část série kurzů se zaměřuje na práci s databází SQL ve vaší aplikaci ASP.NET Core MVC.

Co se naučíte:

  • Zaregistrujte a nakonfigurujte kontext databáze Entity Framework Core pro vaši aplikaci ASP.NET Core MVC.
  • Práce s připojovacími řetězci databáze pro lokální vývoj
  • K vývoji použijte SQL Server Express LocalDB a prozkoumejte databázi a data pomocí Průzkumníka objektů SQL Serveru.
  • Naplňte svou databázi počátečními vzorovými daty.

Předpoklad

Tento kurz používá databázi, kterou jste nastavili v předchozím kroku: Část 4, přidání modelu do aplikace ASP.NET Core MVC.

Práce s kontextem databáze

Objekt MvcMovieContext zpracovává úlohu připojení k databázi a mapování Movie objektů na záznamy databáze. Kontext databáze je zaregistrovaný v kontejneru pro injektování závislostí v Program.cs souboru.

var builder = WebApplication.CreateBuilder(args);

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

Systém ASP.NET Core Configuration načte ConnectionString klíč. Pro místní vývoj získá připojovací řetězec ze appsettings.json souboru:

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

Varování

Tento článek používá místní databázi, která nevyžaduje ověření uživatele. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování nasazených testovacích a produkčních aplikacích vizte Secure authentication flows.

SQL Server Express LocalDB

LocalDB:

  • Je zjednodušená verze databázového stroje SQL Server Express, která je ve výchozím nastavení nainstalovaná se sadou Visual Studio.
  • Spustí se na vyžádání pomocí připojovacího řetězce.
  • Zaměřuje se na vývoj programů. Běží v uživatelském režimu, takže neexistuje složitá konfigurace.
  • Ve výchozím nastavení vytvoří .mdf soubory v adresáři C:/Users/{user}.

Prozkoumání databáze

V nabídce Zobrazení otevřete SQL Server Průzkumník objektů (SSOX).

Klikněte pravým tlačítkem myši na tabulku Movie (dbo.Movie) a vyberte > Návrhář zobrazení

Klikněte pravým tlačítkem myši na tabulku Film > a zvolte Návrhář zobrazení.

Tabulka filmů otevřená v Návrháři

Poznamenejte si ikonu klávesy vedle IDtlačítka . Ef ve výchozím nastavení vytvoří vlastnost s názvem ID primární klíč.

Klikněte pravým tlačítkem myši na Movie tabulku > Zobrazit data.

Klikněte pravým tlačítkem myši na tabulku Film > a vyberte Zobrazit data.

Otevřená tabulka filmů zobrazující data tabulky

Naplnit databázi

Vytvořte novou třídu pojmenovanou SeedData ve složce Models . Vygenerovaný kód nahraďte následujícím kódem:

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

Pokud jsou v databázi nějaké filmy, počáteční inicializátor se vrátí a žádné filmy nejsou přidány.

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

Přidat inicializátor semen

Nahraďte obsah Program.cs následujícím kódem. Nový kód je zvýrazněný.

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

Odstraňte všechny záznamy v databázi. Můžete to udělat pomocí odkazů pro odstranění v prohlížeči nebo ze služby SSOX.

Otestujete aplikaci. Vynuťte inicializaci aplikace voláním kódu v souboru Program.cs, aby se spustila metoda seed. Pokud chcete vynutit inicializaci, zavřete okno příkazového řádku, které Visual Studio otevřelo, a restartujte stisknutím kombinace kláves Ctrl+F5.

Aplikace zobrazuje osetá data.

Otevřená aplikace MVC Movie v Microsoft Edge zobrazující filmová data

Úvod

Tato část série kurzů se zaměřuje na práci s databází SQL ve vaší aplikaci ASP.NET Core MVC.

Co se naučíte:

  • Zaregistrujte a nakonfigurujte kontext databáze Entity Framework Core pro vaši aplikaci ASP.NET Core MVC.
  • Práce s připojovacími řetězci databáze pro lokální vývoj
  • K vývoji použijte SQL Server Express LocalDB a prozkoumejte databázi a data pomocí Průzkumníka objektů SQL Serveru.
  • Naplňte svou databázi počátečními vzorovými daty.

Předpoklad

Tento kurz používá databázi, kterou jste nastavili v předchozím kroku: Část 4, přidání modelu do aplikace ASP.NET Core MVC.

Práce s kontextem databáze

Objekt MvcMovieContext zpracovává úlohu připojení k databázi a mapování Movie objektů na záznamy databáze. Kontext databáze je zaregistrovaný v kontejneru pro injektování závislostí v Program.cs souboru.

var builder = WebApplication.CreateBuilder(args);

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

Systém ASP.NET Core Configuration načte ConnectionString klíč. Pro místní vývoj získá připojovací řetězec ze appsettings.json souboru:

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

Varování

Tento článek používá místní databázi, která nevyžaduje ověření uživatele. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování nasazených testovacích a produkčních aplikacích vizte Secure authentication flows.

SQL Server Express LocalDB

LocalDB:

  • Je zjednodušená verze databázového stroje SQL Server Express, která je ve výchozím nastavení nainstalovaná se sadou Visual Studio.
  • Spustí se na vyžádání pomocí připojovacího řetězce.
  • Zaměřuje se na vývoj programů. Běží v uživatelském režimu, takže neexistuje složitá konfigurace.
  • Ve výchozím nastavení vytvoří .mdf soubory v adresáři C:/Users/{user}.

Prozkoumání databáze

V nabídce Zobrazení otevřete SQL Server Průzkumník objektů (SSOX).

Klikněte pravým tlačítkem myši na tabulku Movie (dbo.Movie) a vyberte > Návrhář zobrazení

Klikněte pravým tlačítkem myši na tabulku Film > a zvolte Návrhář zobrazení.

Tabulka filmů otevřená v Návrháři

Poznamenejte si ikonu klávesy vedle IDtlačítka . Ef ve výchozím nastavení vytvoří vlastnost s názvem ID primární klíč.

Klikněte pravým tlačítkem myši na Movie tabulku > Zobrazit data.

Klikněte pravým tlačítkem myši na tabulku Film > a vyberte Zobrazit data.

Otevřená tabulka filmů zobrazující data tabulky

Naplnit databázi

Vytvořte novou třídu pojmenovanou SeedData ve složce Models . Vygenerovaný kód nahraďte následujícím kódem:

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

Pokud jsou v databázi nějaké filmy, počáteční inicializátor se vrátí a žádné filmy nejsou přidány.

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

<a name=snippet_"si">

Přidat inicializátor semen

Nahraďte obsah Program.cs následujícím kódem. Nový kód je zvýrazněný.

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

Odstraňte všechny záznamy v databázi. Můžete to udělat pomocí odkazů pro odstranění v prohlížeči nebo ze služby SSOX.

Otestujete aplikaci. Vynuťte inicializaci aplikace voláním kódu v souboru Program.cs, aby se spustila metoda seed. Pokud chcete vynutit inicializaci, zavřete okno příkazového řádku, které Visual Studio otevřelo, a restartujte stisknutím kombinace kláves Ctrl+F5.

Aplikace zobrazuje osetá data.

Otevřená aplikace MVC Movie v Microsoft Edge zobrazující filmová data

Úvod

Tato část série kurzů se zaměřuje na práci s databází SQL ve vaší aplikaci ASP.NET Core MVC.

Co se naučíte:

  • Zaregistrujte a nakonfigurujte kontext databáze Entity Framework Core pro vaši aplikaci ASP.NET Core MVC.
  • Práce s připojovacími řetězci databáze pro lokální vývoj
  • K vývoji použijte SQL Server Express LocalDB a prozkoumejte databázi a data pomocí Průzkumníka objektů SQL Serveru.
  • Naplňte svou databázi počátečními vzorovými daty.

Předpoklad

Tento kurz používá databázi, kterou jste nastavili v předchozím kroku: Část 4, přidání modelu do aplikace ASP.NET Core MVC.

Práce s kontextem databáze

Objekt MvcMovieContext zpracovává úlohu připojení k databázi a mapování Movie objektů na záznamy databáze. Kontext databáze je zaregistrovaný v kontejneru pro injektování závislostí v Program.cs souboru.

var builder = WebApplication.CreateBuilder(args);

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

Systém ASP.NET Core Configuration načte ConnectionString klíč. Pro místní vývoj získá připojovací řetězec ze appsettings.json souboru:

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

Varování

Tento článek používá místní databázi, která nevyžaduje ověření uživatele. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování nasazených testovacích a produkčních aplikacích vizte Secure authentication flows.

SQL Server Express LocalDB

LocalDB:

  • Je zjednodušená verze databázového stroje SQL Server Express, která je ve výchozím nastavení nainstalovaná se sadou Visual Studio.
  • Spustí se na vyžádání pomocí připojovacího řetězce.
  • Zaměřuje se na vývoj programů. Běží v uživatelském režimu, takže neexistuje složitá konfigurace.
  • Ve výchozím nastavení vytvoří .mdf soubory v adresáři C:/Users/{user}.

Naplnit databázi

Vytvořte novou třídu pojmenovanou SeedData ve složce Models . Vygenerovaný kód nahraďte následujícím kódem:

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

Pokud jsou v databázi nějaké filmy, počáteční inicializátor se vrátí a žádné filmy nejsou přidány.

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

Přidat inicializátor semen

Nahraďte obsah Program.cs následujícím kódem. Nový kód je zvýrazněný.

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

Odstraňte všechny záznamy v databázi. Můžete to udělat pomocí odkazů pro odstranění v prohlížeči nebo ze služby SSOX.

Otestujete aplikaci. Vynuťte inicializaci aplikace voláním kódu v souboru Program.cs, aby se spustila metoda seed. Pokud chcete vynutit inicializaci, zavřete okno příkazového řádku, které Visual Studio otevřelo, a restartujte stisknutím kombinace kláves Ctrl+F5.

Aplikace zobrazuje osetá data.

Otevřená aplikace MVC Movie v Microsoft Edge zobrazující filmová data

Úvod

Tato část série kurzů se zaměřuje na práci s databází SQL ve vaší aplikaci ASP.NET Core MVC.

Co se naučíte:

  • Zaregistrujte a nakonfigurujte kontext databáze Entity Framework Core pro vaši aplikaci ASP.NET Core MVC.
  • Práce s připojovacími řetězci databáze pro lokální vývoj
  • K vývoji použijte SQL Server Express LocalDB a prozkoumejte databázi a data pomocí Průzkumníka objektů SQL Serveru.
  • Naplňte svou databázi počátečními vzorovými daty.

Předpoklad

Tento kurz používá databázi, kterou jste nastavili v předchozím kroku: Část 4, přidání modelu do aplikace ASP.NET Core MVC.

Práce s kontextem databáze

Objekt MvcMovieContext zpracovává úlohu připojení k databázi a mapování Movie objektů na záznamy databáze. Kontext databáze je zaregistrován do kontejneru pro vkládání závislostí v metodě v souboru ConfigureServices.

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

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

Systém ASP.NET Core Configuration načte ConnectionString klíč. Pro místní vývoj získá připojovací řetězec ze appsettings.json souboru:

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

Varování

Tento článek používá místní databázi, která nevyžaduje ověření uživatele. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování nasazených testovacích a produkčních aplikacích vizte Secure authentication flows.

SQL Server Express LocalDB

LocalDB:

  • Je zjednodušená verze databázového stroje SQL Server Express, která je ve výchozím nastavení nainstalovaná se sadou Visual Studio.
  • Spustí se na vyžádání pomocí připojovacího řetězce.
  • Zaměřuje se na vývoj programů. Běží v uživatelském režimu, takže neexistuje složitá konfigurace.
  • Ve výchozím nastavení vytvoří .mdf soubory v adresáři C:/Users/{user}.

Prozkoumání databáze

V nabídce Zobrazení otevřete SQL Server Průzkumník objektů (SSOX).

Nabídka Zobrazit

Klikněte pravým tlačítkem myši na tabulku Movie, poté vyberte > Zobrazit návrháře.

>

Tabulka filmů otevřená v Návrháři

Poznamenejte si ikonu klávesy vedle IDtlačítka . Ef ve výchozím nastavení vytvoří vlastnost s názvem ID primární klíč.

Klikněte pravým tlačítkem myši na Movie tabulku > Zobrazit data.

Klikněte pravým tlačítkem myši na tabulku Movie > a zobrazte data

Otevřená tabulka filmů zobrazující data tabulky

Naplnit databázi

Vytvořte novou třídu pojmenovanou SeedData ve složce Models . Vygenerovaný kód nahraďte následujícím kódem:

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

Pokud jsou v databázi nějaké filmy, počáteční inicializátor se vrátí a žádné filmy nejsou přidány.

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

Přidat inicializátor semen

Program.cs Obsah nahraďte následujícím kódem:

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

Otestujete aplikaci.

Odstraňte všechny záznamy v databázi. Můžete to udělat pomocí odkazů pro odstranění v prohlížeči nebo ze služby SSOX.

Vynutit inicializaci aplikace, volání metod ve Startup třídě, takže počáteční metoda se spustí. Aby bylo možné vynutit inicializaci, musí se služba IIS Express zastavit a restartovat. Můžete to udělat pomocí některého z následujících přístupů:

  • V oznamovací oblasti klikněte pravým tlačítkem na ikonu IIS Express a klepněte na Ukončit nebo Zastavit web:

    Ikona hlavního panelu systému služby IIS Express

    Místní nabídka

    • Pokud jste spustili VS v režimu bez ladění, stiskněte klávesu F5 a spusťte ji v režimu ladění.
    • Pokud jste spustili VS v režimu ladění, zastavte ladicí program a stiskněte klávesu F5.

Aplikace zobrazuje osetá data.

Otevřená aplikace MVC Movie v Microsoft Edge zobrazující filmová data