Část 2: Přidání modelu do Razor aplikace Pages v ASP.NET Core

Poznámka:

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

Důležité

Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.

Aktuální verzi najdete ve verzi .NET 8 tohoto článku.

V tomto kurzu se přidávají třídy pro správu filmů v databázi. Třídy modelu aplikace používají Entity Framework Core (EF Core) k práci s databází. EF Core je objektově-relační mapovač (O/RM), který zjednodušuje přístup k datům. Nejprve napíšete třídy modelu a EF Core vytvoříte databázi.

Třídy modelu se označují jako třídy POCO (z "P lain-O ld C LR Objects"), protože nemají závislost na EF Core. Definují vlastnosti dat uložených v databázi.

Přidání datového modelu

  1. V Průzkumník řešení klikněte pravým tlačítkem myši naRazor projekt >PagesMovie Přidat>novou složku. Pojmenujte složku Models.

  2. Klikněte pravým tlačítkem myši na Models složku. Vyberte Přidat>třídu. Pojmenujte třídu Movie.

  3. Do třídy přidejte následující vlastnosti Movie :

    using System.ComponentModel.DataAnnotations;
    
    namespace RazorPagesMovie.Models;
    
    public class Movie
    {
        public int Id { get; set; }
        public string? Title { get; set; }
        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string? Genre { get; set; }
        public decimal Price { get; set; }
    }
    

Třída Movie obsahuje:

  • Pole ID vyžaduje databáze pro primární klíč.

  • Atribut [DataType], který určuje typ dat v ReleaseDate vlastnosti. S tímto atributem:

    • Uživatel nemusí do pole kalendářního data zadávat informace o čase.
    • Zobrazí se pouze datum, nikoli informace o čase.
  • Otazník po string značí, že vlastnost je nullable. Další informace naleznete v tématu Odkazové typy s možnou hodnotou Null.

Poznámky k datům jsou popsané v pozdějším kurzu.

Sestavte projekt, abyste ověřili, že nedošlo k žádným chybám kompilace.

Generování uživatelského rozhraní modelu filmu

V této části se model filmu vygeneruje. To znamená, že nástroj pro generování uživatelského rozhraní vytváří stránky pro operace Create, Read, Update a Delete (CRUD) pro model filmu.

  1. Vytvořte složku Pages/Movies:

    1. Klikněte pravým tlačítkem myši na složku >Stránky Přidat>novou složku.
    2. Pojmenujte složku Filmy.
  2. Klikněte pravým tlačítkem myši na složku >Stránky/Filmy Přidat>novou vygenerovanou položku.

    Nová vygenerovaná položka

  3. V dialogovém okně Přidat nové generování uživatelského rozhraní vyberte Razor Stránky pomocí entity Framework (CRUD)>Přidat.

    Přidat generování uživatelského rozhraní

  4. Dokončete dialogové okno Přidat Razor stránky pomocí entity Framework (CRUD):

    1. V rozevíracím seznamu Třída modelu vyberte Movie (RazorPagesMovie.Models).
    2. V řádku třídy kontextu dat vyberte znaménko + (plus).
      1. V dialogovém okně Přidat kontext dat se vygeneruje název RazorPagesMovie.Data.RazorPagesMovieContext třídy.
      2. V rozevíracím seznamu Poskytovatel databáze vyberte SQL Server.
    3. Vyberte Přidat.

    Přidat Razor stránky

Soubor appsettings.json se aktualizuje pomocí připojovací řetězec sloužící k připojení k místní databázi.

Soubory vytvořené a aktualizované

Proces generování uživatelského rozhraní vytvoří následující soubory:

  • Stránky/filmy: Vytváření, odstraňování, podrobnosti, úpravy a index.
  • Data/RazorPagesMovieContext.cs

Vytvořené soubory jsou vysvětleny v dalším kurzu.

Vygenerovaný proces přidá do Program.cs souboru následující zvýrazněný kód:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/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.MapRazorPages();

app.Run();

Změny Program.cs jsou vysvětleny dále v tomto kurzu.

Vytvoření počátečního schématu databáze pomocí funkce migrace EF

Funkce migrace v Entity Framework Core nabízí způsob, jak:

  • Vytvořte počáteční schéma databáze.
  • Přírůstkově aktualizujte schéma databáze, aby bylo synchronizované s datovým modelem aplikace. Existující data v databázi se zachovají.

V této části se okno konzoly Správce balíčků (PMC) používá k:

  • Přidejte počáteční migraci.
  • Aktualizujte databázi počáteční migrací.
  1. V nabídce Nástroje vyberte Správce balíčků> NuGet Správce balíčků Konzola.

    Nabídka PMC

  2. V PMC zadejte následující příkazy:

    Add-Migration InitialCreate
    Update-Database
    
  • Příkaz Add-Migration vygeneruje kód pro vytvoření počátečního schématu databáze. Schéma je založeno na modelu zadaném v DbContext. Argument InitialCreate se používá k pojmenování migrace. Libovolný název lze použít, ale podle konvence je vybraný název, který popisuje migraci.

  • Příkaz Update-Database spustí metodu Up v migracích, které nebyly použity. V tomto případě příkaz spustí metodu UpMigrations/<time-stamp>_InitialCreate.cs v souboru, která vytvoří databázi.

Zobrazí se následující upozornění, které je vyřešeno v pozdějším kroku:

Pro desetinný sloupec Price pro typ entity Movie nebyl zadán žádný typ. To způsobí, že se hodnoty bezobslužně zkrátí, pokud se nevejdou do výchozí přesnosti a měřítka. Explicitně zadejte typ sloupce serveru SQL, který může obsahovat všechny hodnoty pomocí hasColumnType().

Kontext RazorPagesMovieContextdat:

  • Odvozuje z Microsoft.EntityFrameworkCore.DbContext.
  • Určuje, které entity jsou součástí datového modelu.
  • Koordinuje EF Core funkce, jako je Vytvoření, Čtení, Aktualizace a Odstranění, pro Movie model.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; } = default!;
    }
}

Předchozí kód vytvoří vlastnost DbSet<Movie> pro sadu entit. V terminologii Entity Framework sada entit obvykle odpovídá databázové tabulce. Entita odpovídá řádku v tabulce.

Název připojovací řetězec se předává kontextu voláním metody na DbContextOptions objektu. Pro místní vývoj načte konfigurační systém připojovací řetězec ze appsettings.json souboru.

Otestování aplikace

  1. Spusťte aplikaci a připojte /Movies se k adrese URL v prohlížeči (http://localhost:port/movies).

    Pokud se zobrazí následující chyba:

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    Zmeškali jste krok migrace.

  2. Otestujte odkaz Vytvořit nový .

    Vytvoření stránky

    Poznámka:

    Do pole pravděpodobně nebudete moct zadávat desetinné čárky Price . Aby bylo možné podporovat ověřování jQuery pro neanglické národní prostředí, které používají čárku (",") pro desetinnou čárku a pro jiné formáty kalendářních dat než v ANGLIČTINĚ, musí být aplikace globalizována. Pokyny ke globalizaci najdete v tomto problému na GitHubu.

  3. Otestujte odkazy Upravit, Podrobnosti a Odstranit.

Další kurz vysvětluje soubory vytvořené generováním uživatelského rozhraní.

Prozkoumání kontextu registrovaného pomocí injektáže závislostí

ASP.NET Core se sestavuje pomocí injektáže závislostí. Služby, jako EF Core je kontext databáze, se během spouštění aplikace registrují pomocí injektáže závislostí. Komponenty, které vyžadují tyto služby (například Razor Stránky), jsou poskytovány prostřednictvím parametrů konstruktoru. Kód konstruktoru, který získá instanci kontextu databáze, se zobrazí později v kurzu.

Nástroj pro generování uživatelského rozhraní automaticky vytvořil kontext databáze a zaregistroval ho v kontejneru injektáže závislostí. Do souboru se přidá Program.cs následující zvýrazněný kód správcem:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/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.MapRazorPages();

app.Run();

Řešení potíží s dokončenou ukázkou

Pokud narazíte na problém, který nemůžete vyřešit, porovnejte kód s dokončeným projektem. Zobrazit nebo stáhnout dokončený projekt (jak stáhnout)

Další kroky

V tomto kurzu se přidávají třídy pro správu filmů v databázi. Třídy modelu aplikace používají Entity Framework Core (EF Core) k práci s databází. EF Core je objektově-relační mapovač (O/RM), který zjednodušuje přístup k datům. Nejprve napíšete třídy modelu a EF Core vytvoříte databázi.

Třídy modelu se označují jako třídy POCO (z "P lain-O ld C LR Objects"), protože nemají závislost na EF Core. Definují vlastnosti dat uložených v databázi.

Přidání datového modelu

  1. V Průzkumník řešení klikněte pravým tlačítkem myši naRazor projekt >PagesMovie Přidat>novou složku. Pojmenujte složku Models.

  2. Klikněte pravým tlačítkem myši na Models složku. Vyberte Přidat>třídu. Pojmenujte třídu Movie.

  3. Do třídy přidejte následující vlastnosti Movie :

    using System.ComponentModel.DataAnnotations;
    
    namespace RazorPagesMovie.Models;
    
    public class Movie
    {
        public int Id { get; set; }
        public string? Title { get; set; }
        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string? Genre { get; set; }
        public decimal Price { get; set; }
    }
    

Třída Movie obsahuje:

  • Pole ID vyžaduje databáze pro primární klíč.

  • Atribut [DataType], který určuje typ dat v ReleaseDate vlastnosti. S tímto atributem:

    • Uživatel nemusí do pole kalendářního data zadávat informace o čase.
    • Zobrazí se pouze datum, nikoli informace o čase.
  • Otazník po string značí, že vlastnost je nullable. Další informace naleznete v tématu Odkazové typy s možnou hodnotou Null.

Poznámky k datům jsou popsané v pozdějším kurzu.

Sestavte projekt, abyste ověřili, že nedošlo k žádným chybám kompilace.

Generování uživatelského rozhraní modelu filmu

V této části se model filmu vygeneruje. To znamená, že nástroj pro generování uživatelského rozhraní vytváří stránky pro operace Create, Read, Update a Delete (CRUD) pro model filmu.

  1. Vytvořte složku Pages/Movies:

    1. Klikněte pravým tlačítkem myši na složku >Stránky Přidat>novou složku.
    2. Pojmenujte složku Filmy.
  2. Klikněte pravým tlačítkem myši na složku >Stránky/Filmy Přidat>novou vygenerovanou položku.

    Nová vygenerovaná položka

  3. V dialogovém okně Přidat nové generování uživatelského rozhraní vyberte Razor Stránky pomocí entity Framework (CRUD)>Přidat.

    Přidat generování uživatelského rozhraní

  4. Dokončete dialogové okno Přidat Razor stránky pomocí entity Framework (CRUD):

    1. V rozevíracím seznamu Třída modelu vyberte Movie (RazorPagesMovie.Models).
    2. V řádku třídy kontextu dat vyberte znaménko + (plus).
      1. V dialogovém okně Přidat kontext dat se vygeneruje název RazorPagesMovie.Data.RazorPagesMovieContext třídy.
      2. V rozevíracím seznamu Poskytovatel databáze vyberte SQL Server.
    3. Vyberte Přidat.

    Přidat Razor stránky

Soubor appsettings.json se aktualizuje pomocí připojovací řetězec sloužící k připojení k místní databázi.

Soubory vytvořené a aktualizované

Proces generování uživatelského rozhraní vytvoří následující soubory:

  • Stránky/filmy: Vytváření, odstraňování, podrobnosti, úpravy a index.
  • Data/RazorPagesMovieContext.cs

Vytvořené soubory jsou vysvětleny v dalším kurzu.

Vygenerovaný proces přidá do Program.cs souboru následující zvýrazněný kód:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/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.MapRazorPages();

app.Run();

Změny Program.cs jsou vysvětleny dále v tomto kurzu.

Vytvoření počátečního schématu databáze pomocí funkce migrace EF

Funkce migrace v Entity Framework Core nabízí způsob, jak:

  • Vytvořte počáteční schéma databáze.
  • Přírůstkově aktualizujte schéma databáze, aby bylo synchronizované s datovým modelem aplikace. Existující data v databázi se zachovají.

V této části se okno konzoly Správce balíčků (PMC) používá k:

  • Přidejte počáteční migraci.
  • Aktualizujte databázi počáteční migrací.
  1. V nabídce Nástroje vyberte Správce balíčků> NuGet Správce balíčků Konzola.

    Nabídka PMC

  2. V PMC zadejte následující příkazy:

    Add-Migration InitialCreate
    Update-Database
    
  • Příkaz Add-Migration vygeneruje kód pro vytvoření počátečního schématu databáze. Schéma je založeno na modelu zadaném v DbContext. Argument InitialCreate se používá k pojmenování migrace. Libovolný název lze použít, ale podle konvence je vybraný název, který popisuje migraci.

  • Příkaz Update-Database spustí metodu Up v migracích, které nebyly použity. V tomto případě příkaz spustí metodu UpMigrations/<time-stamp>_InitialCreate.cs v souboru, která vytvoří databázi.

Zobrazí se následující upozornění, které je vyřešeno v pozdějším kroku:

Pro desetinný sloupec Price pro typ entity Movie nebyl zadán žádný typ. To způsobí, že se hodnoty bezobslužně zkrátí, pokud se nevejdou do výchozí přesnosti a měřítka. Explicitně zadejte typ sloupce serveru SQL, který může obsahovat všechny hodnoty pomocí hasColumnType().

Kontext RazorPagesMovieContextdat:

  • Odvozuje z Microsoft.EntityFrameworkCore.DbContext.
  • Určuje, které entity jsou součástí datového modelu.
  • Koordinuje EF Core funkce, jako je Vytvoření, Čtení, Aktualizace a Odstranění, pro Movie model.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; } = default!;
    }
}

Předchozí kód vytvoří vlastnost DbSet<Movie> pro sadu entit. V terminologii Entity Framework sada entit obvykle odpovídá databázové tabulce. Entita odpovídá řádku v tabulce.

Název připojovací řetězec se předává kontextu voláním metody na DbContextOptions objektu. Pro místní vývoj načte konfigurační systém připojovací řetězec ze appsettings.json souboru.

Otestování aplikace

  1. Spusťte aplikaci a připojte /Movies se k adrese URL v prohlížeči (http://localhost:port/movies).

    Pokud se zobrazí následující chyba:

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    Zmeškali jste krok migrace.

  2. Otestujte odkaz Vytvořit nový .

    Vytvoření stránky

    Poznámka:

    Do pole pravděpodobně nebudete moct zadávat desetinné čárky Price . Aby bylo možné podporovat ověřování jQuery pro neanglické národní prostředí, které používají čárku (",") pro desetinnou čárku a pro jiné formáty kalendářních dat než v ANGLIČTINĚ, musí být aplikace globalizována. Pokyny ke globalizaci najdete v tomto problému na GitHubu.

  3. Otestujte odkazy Upravit, Podrobnosti a Odstranit.

Další kurz vysvětluje soubory vytvořené generováním uživatelského rozhraní.

Prozkoumání kontextu registrovaného pomocí injektáže závislostí

ASP.NET Core se sestavuje pomocí injektáže závislostí. Služby, jako EF Core je kontext databáze, se během spouštění aplikace registrují pomocí injektáže závislostí. Komponenty, které vyžadují tyto služby (například Razor Stránky), jsou poskytovány prostřednictvím parametrů konstruktoru. Kód konstruktoru, který získá instanci kontextu databáze, se zobrazí později v kurzu.

Nástroj pro generování uživatelského rozhraní automaticky vytvořil kontext databáze a zaregistroval ho v kontejneru injektáže závislostí. Do souboru se přidá Program.cs následující zvýrazněný kód správcem:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/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.MapRazorPages();

app.Run();

Řešení potíží s dokončenou ukázkou

Pokud narazíte na problém, který nemůžete vyřešit, porovnejte kód s dokončeným projektem. Zobrazit nebo stáhnout dokončený projekt (jak stáhnout)

Další kroky

V tomto kurzu se přidávají třídy pro správu filmů v databázi. Třídy modelu aplikace používají Entity Framework Core (EF Core) k práci s databází. EF Core je objektově-relační mapovač (O/RM), který zjednodušuje přístup k datům. Nejprve napíšete třídy modelu a EF Core vytvoříte databázi.

Třídy modelu se označují jako třídy POCO (z "P lain-O ld C LR Objects"), protože nemají závislost na EF Core. Definují vlastnosti dat uložených v databázi.

Přidání datového modelu

  1. V Průzkumník řešení klikněte pravým tlačítkem myši naRazor projekt >PagesMovie Přidat>novou složku. Pojmenujte složku Models.

  2. Klikněte pravým tlačítkem myši na Models složku. Vyberte Přidat>třídu. Pojmenujte třídu Movie.

  3. Do třídy přidejte následující vlastnosti Movie :

    using System.ComponentModel.DataAnnotations;
    
    namespace RazorPagesMovie.Models
    {
        public class Movie
        {
            public int ID { get; set; }
            public string Title { get; set; } = string.Empty;
    
            [DataType(DataType.Date)]
            public DateTime ReleaseDate { get; set; }
            public string Genre { get; set; } = string.Empty;
            public decimal Price { get; set; }
        }
    }
    

Třída Movie obsahuje:

  • Pole ID vyžaduje databáze pro primární klíč.

  • Atribut [DataType], který určuje typ dat v ReleaseDate vlastnosti. S tímto atributem:

    • Uživatel nemusí do pole kalendářního data zadávat informace o čase.
    • Zobrazí se pouze datum, nikoli informace o čase.

Poznámky k datům jsou popsané v pozdějším kurzu.

Sestavte projekt, abyste ověřili, že nedošlo k žádným chybám kompilace.

Generování uživatelského rozhraní modelu filmu

V této části se model filmu vygeneruje. To znamená, že nástroj pro generování uživatelského rozhraní vytváří stránky pro operace Create, Read, Update a Delete (CRUD) pro model filmu.

  1. Přidejte balíček Microsoft.EntityFrameworkCore.DesignNuGet, který je nutný pro nástroj pro generování uživatelského rozhraní.

    1. V nabídce Nástroje vyberte NuGet Správce balíčků> Nabídky NuGet pro řešení.Správce balíčků NuGet – správa
    2. Vyberte kartu Procházet.
    3. Zadejte Microsoft.EntityFrameworkCore.Design ho a vyberte ho ze seznamu.
    4. Zkontrolujte Project a pak vyberte Nainstalovat.
    5. V dialogovém okně Přijetí licence vyberte Možnost Přijmout. Správce balíčků NuGet – přidání balíčku
  2. Vytvořte složku Pages/Movies:

    1. Klikněte pravým tlačítkem myši na složku >Stránky Přidat>novou složku.
    2. Pojmenujte složku Filmy.
  3. Klikněte pravým tlačítkem myši na složku >Stránky/Filmy Přidat>novou vygenerovanou položku.

    Nová vygenerovaná položka

  4. V dialogovém okně Přidat nové generování uživatelského rozhraní vyberte Razor Stránky pomocí entity Framework (CRUD)>Přidat.

    Přidat generování uživatelského rozhraní

  5. Dokončete dialogové okno Přidat Razor stránky pomocí entity Framework (CRUD):

    1. V rozevíracím seznamu Třída modelu vyberte Movie (RazorPagesMovie.Models).
    2. V řádku třídy kontextu dat vyberte znaménko + (plus).
      1. V dialogovém okně Přidat kontext dat se vygeneruje název RazorPagesMovie.Data.RazorPagesMovieContext třídy.
    3. Vyberte Přidat.

    Přidat Razor stránky

    Pokud se zobrazí chybová zpráva s informací, že potřebujete balíček nainstalovatMicrosoft.EntityFrameworkCore.SqlServer, opakujte kroky začínající přidáním >nové vygenerované položky.

Soubor appsettings.json se aktualizuje pomocí připojovací řetězec sloužící k připojení k místní databázi.

Soubory vytvořené a aktualizované

Proces generování uživatelského rozhraní vytvoří následující soubory:

  • Stránky/filmy: Vytváření, odstraňování, podrobnosti, úpravy a index.
  • Data/RazorPagesMovieContext.cs

Vytvořené soubory jsou vysvětleny v dalším kurzu.

Vygenerovaný proces přidá do Program.cs souboru následující zvýrazněný kód:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/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.MapRazorPages();

app.Run();

Změny Program.cs jsou vysvětleny dále v tomto kurzu.

Vytvoření počátečního schématu databáze pomocí funkce migrace EF

Funkce migrace v Entity Framework Core nabízí způsob, jak:

  • Vytvořte počáteční schéma databáze.
  • Přírůstkově aktualizujte schéma databáze, aby bylo synchronizované s datovým modelem aplikace. Existující data v databázi se zachovají.

V této části se okno konzoly Správce balíčků (PMC) používá k:

  • Přidejte počáteční migraci.
  • Aktualizujte databázi počáteční migrací.
  1. V nabídce Nástroje vyberte Správce balíčků> NuGet Správce balíčků Konzola.

    Nabídka PMC

  2. V PMC zadejte následující příkazy:

    Add-Migration InitialCreate
    Update-Database
    
    

Předchozí příkazy nainstalují nástroje Entity Framework Core a spustí migrations příkaz pro vygenerování kódu, který vytvoří počáteční schéma databáze.

Zobrazí se následující upozornění, které je vyřešeno v pozdějším kroku:

Pro desetinný sloupec Price pro typ entity Movie nebyl zadán žádný typ. To způsobí, že se hodnoty bezobslužně zkrátí, pokud se nevejdou do výchozí přesnosti a měřítka. Explicitně zadejte typ sloupce serveru SQL, který může obsahovat všechny hodnoty pomocí hasColumnType().

Příkaz migrations vygeneruje kód pro vytvoření počátečního schématu databáze. Schéma je založeno na modelu zadaném v DbContext. Argument InitialCreate se používá k pojmenování migrací. Libovolný název lze použít, ale podle konvence je vybraný název, který popisuje migraci.

Příkaz update spustí metodu Up v migracích, které nebyly použity. V tomto případě update spustí metodu UpMigrations/<time-stamp>_InitialCreate.cs v souboru, která vytvoří databázi.

Prozkoumání kontextu registrovaného pomocí injektáže závislostí

ASP.NET Core se sestavuje pomocí injektáže závislostí. Služby, jako EF Core je kontext databáze, se během spouštění aplikace registrují pomocí injektáže závislostí. Komponenty, které vyžadují tyto služby (například Razor Stránky), jsou poskytovány prostřednictvím parametrů konstruktoru. Kód konstruktoru, který získá instanci kontextu databáze, se zobrazí později v kurzu.

Nástroj pro generování uživatelského rozhraní automaticky vytvořil kontext databáze a zaregistroval ho v kontejneru injektáže závislostí. Do souboru se přidá Program.cs následující zvýrazněný kód správcem:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/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.MapRazorPages();

app.Run();

Kontext RazorPagesMovieContextdat:

  • Odvozuje z Microsoft.EntityFrameworkCore.DbContext.
  • Určuje, které entity jsou součástí datového modelu.
  • Koordinuje EF Core funkce, jako je Vytvoření, Čtení, Aktualizace a Odstranění, pro Movie model.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie>? Movie { get; set; }
    }
}

Předchozí kód vytvoří vlastnost DbSet<Movie> pro sadu entit. V terminologii Entity Framework sada entit obvykle odpovídá databázové tabulce. Entita odpovídá řádku v tabulce.

Název připojovací řetězec se předává kontextu voláním metody na DbContextOptions objektu. Pro místní vývoj načte konfigurační systém připojovací řetězec ze appsettings.json souboru.

Otestování aplikace

  1. Spusťte aplikaci a připojte /Movies se k adrese URL v prohlížeči (http://localhost:port/movies).

    Pokud se zobrazí následující chyba:

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    Zmeškali jste krok migrace.

  2. Otestujte odkaz Vytvořit nový .

    Vytvoření stránky

    Poznámka:

    Do pole pravděpodobně nebudete moct zadávat desetinné čárky Price . Aby bylo možné podporovat ověřování jQuery pro neanglické národní prostředí, které používají čárku (",") pro desetinnou čárku a pro jiné formáty kalendářních dat než v ANGLIČTINĚ, musí být aplikace globalizována. Pokyny ke globalizaci najdete v tomto problému na GitHubu.

  3. Otestujte odkazy Upravit, Podrobnosti a Odstranit.

Další kurz vysvětluje soubory vytvořené generováním uživatelského rozhraní.

Řešení potíží s dokončenou ukázkou

Pokud narazíte na problém, který nemůžete vyřešit, porovnejte kód s dokončeným projektem. Zobrazit nebo stáhnout dokončený projekt (jak stáhnout)

Další kroky

V této části se přidávají třídy pro správu filmů v databázi. Třídy modelu aplikace používají Entity Framework Core (EF Core) k práci s databází. EF Core je objektově-relační mapovač (O/RM), který zjednodušuje přístup k datům. Nejprve napíšete třídy modelu a EF Core vytvoříte databázi.

Třídy modelu se označují jako třídy POCO (z "P lain-O ld C LR Objects"), protože nemají závislost na EF Core. Definují vlastnosti dat uložených v databázi.

Zobrazení nebo stažení vzorového kódu (postup stažení)

Přidání datového modelu

  1. V Průzkumník řešení klikněte pravým tlačítkem myši naRazor projekt >PagesMovie Přidat>novou složku. Pojmenujte složku Models.

  2. Klikněte pravým tlačítkem myši na Models složku. Vyberte Přidat>třídu. Pojmenujte třídu Movie.

  3. Do třídy přidejte následující vlastnosti Movie :

    using System;
    using System.ComponentModel.DataAnnotations;
    
    namespace RazorPagesMovie.Models
    {
        public class Movie
        {
            public int ID { get; set; }
            public string Title { get; set; }
    
            [DataType(DataType.Date)]
            public DateTime ReleaseDate { get; set; }
            public string Genre { get; set; }
            public decimal Price { get; set; }
        }
    }
    

Třída Movie obsahuje:

  • Pole ID vyžaduje databáze pro primární klíč.

  • [DataType(DataType.Date)]: Atribut [DataType] určuje typ dat (Date). S tímto atributem:

    • Uživatel nemusí do pole kalendářního data zadávat informace o čase.
    • Zobrazí se pouze datum, nikoli informace o čase.

Poznámky k datům jsou popsané v pozdějším kurzu.

Sestavte projekt, abyste ověřili, že nedošlo k žádným chybám kompilace.

Generování uživatelského rozhraní modelu filmu

V této části se model filmu vygeneruje. To znamená, že nástroj pro generování uživatelského rozhraní vytváří stránky pro operace Create, Read, Update a Delete (CRUD) pro model filmu.

  1. Vytvořte složku Pages/Movies:

    1. Klikněte pravým tlačítkem myši na složku >Stránky Přidat>novou složku.
    2. Pojmenujte složku Filmy.
  2. Klikněte pravým tlačítkem myši na složku >Stránky/Filmy Přidat>novou vygenerovanou položku.

    Nová vygenerovaná položka

  3. V dialogovém okně Přidat generování uživatelského rozhraní vyberte Razor Stránky pomocí entity Framework (CRUD)>Přidat.

    Přidat generování uživatelského rozhraní

  4. Dokončete dialogové okno Přidat Razor stránky pomocí entity Framework (CRUD):

    1. V rozevíracím seznamu Třída modelu vyberte Movie (RazorPagesMovie.Models).
    2. V řádku třídy kontextu dat vyberte znaménko + (plus).
      1. V dialogovém okně Přidat kontext dat se vygeneruje název RazorPagesMovie.Data.RazorPagesMovieContext třídy.
    3. Vyberte Přidat.

    Přidat Razor stránky

Soubor appsettings.json se aktualizuje pomocí připojovací řetězec sloužící k připojení k místní databázi.

Soubory vytvořené a aktualizované

Proces generování uživatelského rozhraní vytvoří následující soubory:

  • Stránky/filmy: Vytváření, odstraňování, podrobnosti, úpravy a index.
  • Data/RazorPagesMovieContext.cs

Aktualizované soubory

  • Startup.cs

Vytvořené a aktualizované soubory jsou vysvětleny v další části.

Vytvoření počátečního schématu databáze pomocí funkce migrace EF

Funkce migrace v Entity Framework Core nabízí způsob, jak:

  • Vytvořte počáteční schéma databáze.
  • Přírůstkově aktualizujte schéma databáze, aby bylo synchronizované s datovým modelem aplikace. Existující data v databázi se zachovají.

V této části se okno konzoly Správce balíčků (PMC) používá k:

  • Přidejte počáteční migraci.
  • Aktualizujte databázi počáteční migrací.
  1. V nabídce Nástroje vyberte Správce balíčků> NuGet Správce balíčků Konzola.

    Nabídka PMC

  2. V PMC zadejte následující příkazy:

    Add-Migration InitialCreate
    Update-Database
    

U SQL Serveru vygenerují předchozí příkazy následující upozornění: Pro desetinný sloupec Price (Cena) pro typ entity Movie nebyl zadán žádný typ. To způsobí, že se hodnoty bezobslužně zkrátí, pokud se nevejdou do výchozí přesnosti a měřítka. Explicitně zadejte typ sloupce SERVERU SQL, který může obsahovat všechny hodnoty pomocí hasColumnType()."

Toto upozornění ignorujte, protože se bude řešit v pozdějším kroku.

Příkaz migrations vygeneruje kód pro vytvoření počátečního schématu databáze. Schéma je založeno na modelu zadaném v DbContext. Argument InitialCreate se používá k pojmenování migrací. Libovolný název lze použít, ale podle konvence je vybraný název, který popisuje migraci.

Příkaz update spustí metodu Up v migracích, které nebyly použity. V tomto případě update spustí metodu UpMigrations/<time-stamp>_InitialCreate.cs v souboru, která vytvoří databázi.

Prozkoumání kontextu registrovaného pomocí injektáže závislostí

ASP.NET Core se sestavuje pomocí injektáže závislostí. Služby, jako EF Core je kontext databáze, se během spouštění aplikace registrují pomocí injektáže závislostí. Komponenty, které vyžadují tyto služby (například Razor Stránky), jsou poskytovány prostřednictvím parametrů konstruktoru. Kód konstruktoru, který získá instanci kontextu databáze, se zobrazí později v kurzu.

Nástroj pro generování uživatelského rozhraní automaticky vytvořil kontext databáze a zaregistroval ho v kontejneru injektáže závislostí.

Prozkoumejte metodu Startup.ConfigureServices . Zvýrazněnou čáru přidal scaffolder:

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

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

Funkce RazorPagesMovieContext souřadnic EF Core , jako je vytvoření, čtení, aktualizace a odstranění, pro Movie model. Kontext dat (RazorPagesMovieContext) je odvozen z Microsoft.EntityFrameworkCore.DbContext. Kontext dat určuje, které entity jsou součástí datového modelu.

using Microsoft.EntityFrameworkCore;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (
            DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
    }
}

Předchozí kód vytvoří vlastnost DbSet<Movie> pro sadu entit. V terminologii Entity Framework sada entit obvykle odpovídá databázové tabulce. Entita odpovídá řádku v tabulce.

Název připojovací řetězec se předává kontextu voláním metody na DbContextOptions objektu. Pro místní vývoj načte konfigurační systém připojovací řetězec ze appsettings.json souboru.

Otestování aplikace

  1. Spusťte aplikaci a připojte /Movies se k adrese URL v prohlížeči (http://localhost:port/movies).

    Pokud se zobrazí následující chyba:

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    Zmeškali jste krok migrace.

  2. Otestujte odkaz Vytvořit .

    Vytvoření stránky

    Poznámka:

    Do pole pravděpodobně nebudete moct zadávat desetinné čárky Price . Aby bylo možné podporovat ověřování jQuery pro neanglické národní prostředí, které používají čárku (",") pro desetinnou čárku a pro jiné formáty kalendářních dat než v ANGLIČTINĚ, musí být aplikace globalizována. Pokyny ke globalizaci najdete v tomto problému na GitHubu.

  3. Otestujte odkazy Upravit, Podrobnosti a Odstranit.

Protokolování SQL entity Framework Core

Konfiguraci protokolování obvykle zajišťuje oddíl Logging souborů appsettings.{Environment}.json. Pokud chcete protokolovat příkazy SQL, přidejte "Microsoft.EntityFrameworkCore.Database.Command": "Information" do appsettings.Development.json souboru:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDB-2;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
     ,"Microsoft.EntityFrameworkCore.Database.Command": "Information"
    }
  },
  "AllowedHosts": "*"
}

U předchozích JSpříkazů ON se příkazy SQL zobrazí na příkazovém řádku a v okně výstupu sady Visual Studio.

Další informace najdete v tématu Protokolování v .NET Core a ASP.NET Core a tento problém na GitHubu.

Další kurz vysvětluje soubory vytvořené generováním uživatelského rozhraní.

Další kroky

V této části se přidávají třídy pro správu filmů. Třídy modelu aplikace používají Entity Framework Core (EF Core) k práci s databází. EF Core je objektově-relační mapovač (O/RM), který zjednodušuje přístup k datům.

Třídy modelu se označují jako třídy POCO (z "prostých objektů CLR"), protože nemají žádnou závislost na EF Core. Definují vlastnosti dat uložených v databázi.

Zobrazení nebo stažení vzorového kódu (postup stažení)

Přidání datového modelu

Klikněte pravým tlačítkem myši na Razorprojekt >PagesMovie Přidat>novou složku. Pojmenujte složku Models.

Klikněte pravým tlačítkem myši na Models složku. Vyberte Přidat>třídu. Pojmenujte třídu Movie.

Do třídy přidejte následující vlastnosti Movie :

using System;
using System.ComponentModel.DataAnnotations;

namespace RazorPagesMovie.Models
{
    public class Movie
    {
        public int ID { get; set; }
        public string Title { get; set; }

        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }
        public decimal Price { get; set; }
    }
}

Třída Movie obsahuje:

  • Pole ID vyžaduje databáze pro primární klíč.

  • [DataType(DataType.Date)]: Atribut DataType určuje typ dat (Date). S tímto atributem:

    • Uživatel nemusí do pole data zadávat informace o čase.
    • Zobrazí se pouze datum, nikoli informace o čase.

Poznámky k datům jsou popsané v pozdějším kurzu.

Poznámky k datům jsou popsané v pozdějším kurzu.

Sestavte projekt, abyste ověřili, že nedošlo k žádným chybám kompilace.

Generování uživatelského rozhraní modelu filmu

V této části se model filmu vygeneruje. To znamená, že nástroj pro generování uživatelského rozhraní vytváří stránky pro operace Create, Read, Update a Delete (CRUD) pro model filmu.

Vytvořte složku Pages/Movies:

  • Klikněte pravým tlačítkem myši na složku >Stránky Přidat>novou složku.
  • Pojmenujte složku Filmy.

Klikněte pravým tlačítkem myši na složku >Stránky/Filmy Přidat>novou vygenerovanou položku.

Nová vygenerovaná položka ve VScode

V dialogovém okně Přidat generování uživatelského rozhraní vyberte Razor Stránky pomocí entity Framework (CRUD)>Přidat.

Přidání uživatelského rozhraní ve VScode

Dokončete dialogové okno Přidat Razor stránky pomocí entity Framework (CRUD):

  • V rozevíracím seznamu Třída modelu vyberte Movie (RazorPagesMovie.Models).
  • V řádku třídy kontextu dat vyberte + znaménko (plus) a změňte vygenerovaný název z RazorPagesMovie.Models.RazorPagesMovieContext na RazorPagesMovie.Data.RazorPagesMovieContext. Tato změna není nutná. Vytvoří třídu kontextu databáze se správným oborem názvů.
  • Vyberte Přidat.

Přidání Razor stránek ve VScode

Soubor appsettings.json se aktualizuje pomocí připojovací řetězec sloužící k připojení k místní databázi.

Vytvořené soubory

Proces generování uživatelského rozhraní vytvoří a aktualizuje následující soubory:

  • Stránky/filmy: Vytváření, odstraňování, podrobnosti, úpravy a index.
  • Data/RazorPagesMovieContext.cs

Aktualizováno

  • Startup.cs

Vytvořené a aktualizované soubory jsou vysvětleny v další části.

Počáteční migrace

V této části se konzola Správce balíčků (PMC) používá k:

  • Přidejte počáteční migraci.
  • Aktualizujte databázi počáteční migrací.

V nabídce Nástroje vyberte Správce balíčků> NuGet Správce balíčků Konzola.

Nabídka PMC

V PMC zadejte následující příkazy:

Add-Migration InitialCreate
Update-Database

Předchozí příkazy vygenerují následující upozornění: Pro desetinný sloupec Price (Cena) pro typ entity Movie nebyl zadán žádný typ. To způsobí, že se hodnoty bezobslužně zkrátí, pokud se nevejdou do výchozí přesnosti a měřítka. Explicitně zadejte typ sloupce SERVERU SQL, který může obsahovat všechny hodnoty pomocí hasColumnType()."

Toto upozornění ignorujte, protože se bude řešit v pozdějším kroku.

Příkaz migrace vygeneruje kód pro vytvoření počátečního schématu databáze. Schéma je založeno na modelu zadaném v DbContext. Argument InitialCreate se používá k pojmenování migrací. Libovolný název lze použít, ale podle konvence je vybraný název, který popisuje migraci.

Příkaz update spustí metodu Up v migracích, které nebyly použity. V tomto případě update spustí metodu Up v Migrations/<time-stamp>_InitialCreate.cs souboru, která vytvoří databázi.

Prozkoumání kontextu registrovaného pomocí injektáže závislostí

ASP.NET Core se sestavuje pomocí injektáže závislostí. Služby, jako EF Core je kontext databáze, se během spouštění aplikace registrují pomocí injektáže závislostí. Komponenty, které vyžadují tyto služby, například Razor Stránky, jsou poskytovány prostřednictvím parametrů konstruktoru. Kód konstruktoru, který získá instanci kontextu databáze, se zobrazí později v kurzu.

Nástroj pro generování uživatelského rozhraní automaticky vytvořil kontext databáze a zaregistroval ho v kontejneru injektáže závislostí.

Prozkoumejte metodu Startup.ConfigureServices . Zvýrazněnou čáru přidal scaffolder:

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

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

Funkce RazorPagesMovieContext souřadnic EF Core , jako je vytvoření, čtení, aktualizace a odstranění, pro Movie model. Kontext dat (RazorPagesMovieContext) je odvozen z Microsoft.EntityFrameworkCore.DbContext. Kontext dat určuje, které entity jsou součástí datového modelu.

using Microsoft.EntityFrameworkCore;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (
            DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
    }
}

Předchozí kód vytvoří vlastnost DbSet<Movie> pro sadu entit. V terminologii Entity Framework sada entit obvykle odpovídá databázové tabulce. Entita odpovídá řádku v tabulce.

Název připojovací řetězec se předává kontextu voláním metody na DbContextOptions objektu. Pro místní vývoj načte konfigurační systém připojovací řetězec ze appsettings.json souboru.

Otestování aplikace

  • Spusťte aplikaci a připojte /Movies se k adrese URL v prohlížeči (http://localhost:port/movies).

Pokud se zobrazí chyba:

SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
Login failed for user 'User-name'.

Zmeškali jste krok migrace.

  • Otestujte odkaz Vytvořit .

    Vytvoření stránky

    Poznámka:

    Do pole pravděpodobně nebudete moct zadávat desetinné čárky Price . Aby bylo možné podporovat ověřování jQuery pro neanglické národní prostředí, které používají čárku (",") pro desetinnou čárku a pro jiné formáty kalendářních dat než v ANGLIČTINĚ, musí být aplikace globalizována. Pokyny ke globalizaci najdete v tomto problému na GitHubu.

  • Otestujte odkazy Upravit, Podrobnosti a Odstranit.

Další kurz vysvětluje soubory vytvořené generováním uživatelského rozhraní.

Další kroky