Čá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.
Upozorňující
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v tématu .NET a .NET Core Zásady podpory. 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
V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> RazorPagesMovie 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.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.
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.
V dialogovém okně Přidat nové generování uživatelského rozhraní vyberte Razor Stránky pomocí entity Framework (CRUD)>Přidat.
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).
- V dialogovém okně Přidat kontext dat se vygeneruje název
RazorPagesMovie.Data.RazorPagesMovieContext
třídy. - V rozevíracím seznamu Poskytovatel databáze vyberte SQL Server.
- V dialogovém okně Přidat kontext dat se vygeneruje název
- Vyberte Přidat.
Soubor appsettings.json
se aktualizuje pomocí připojovací řetězec sloužící k připojení k místní databázi.
Upozorňující
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íchaplikacích
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.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
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í.
V nabídce Nástroje vyberte Správce balíčků> NuGet Správce balíčků Konzola.
V PMC zadejte následující příkaz:
Add-Migration InitialCreate
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 vDbContext
. ArgumentInitialCreate
se používá k pojmenování migrace. Libovolný název lze použít, ale podle konvence je vybraný název, který popisuje migraci.
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().
V PMC zadejte následující příkaz:
Update-Database
Příkaz
Update-Database
spustí metoduUp
v migracích, které nebyly použity. V tomto případě příkaz spustí metoduUp
Migrations/<time-stamp>_InitialCreate.cs
v souboru, která vytvoří databázi.
Kontext RazorPagesMovieContext
dat:
- 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.
Třída RazorPagesMovieContext
ve vygenerovaném souboru Data/RazorPagesMovieContext.cs
:
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
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.
Otestujte odkaz Vytvořit nový .
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í.
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.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
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
V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> RazorPagesMovie 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.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.
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.
V dialogovém okně Přidat nové generování uživatelského rozhraní vyberte Razor Stránky pomocí entity Framework (CRUD)>Přidat.
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).
- V dialogovém okně Přidat kontext dat se vygeneruje název
RazorPagesMovie.Data.RazorPagesMovieContext
třídy. - V rozevíracím seznamu Poskytovatel databáze vyberte SQL Server.
- V dialogovém okně Přidat kontext dat se vygeneruje název
- Vyberte Přidat.
Soubor appsettings.json
se aktualizuje pomocí připojovací řetězec sloužící k připojení k místní databázi.
Upozorňující
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íchaplikacích
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í.
V nabídce Nástroje vyberte Správce balíčků> NuGet Správce balíčků Konzola.
V PMC zadejte následující příkaz:
Add-Migration InitialCreate
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 vDbContext
. ArgumentInitialCreate
se používá k pojmenování migrace. Libovolný název lze použít, ale podle konvence je vybraný název, který popisuje migraci.
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().
V PMC zadejte následující příkaz:
Update-Database
Příkaz
Update-Database
spustí metoduUp
v migracích, které nebyly použity. V tomto případě příkaz spustí metoduUp
Migrations/<time-stamp>_InitialCreate.cs
v souboru, která vytvoří databázi.
Kontext RazorPagesMovieContext
dat:
- 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
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.
Otestujte odkaz Vytvořit nový .
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í.
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
V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> RazorPagesMovie 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.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.
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.
V dialogovém okně Přidat nové generování uživatelského rozhraní vyberte Razor Stránky pomocí entity Framework (CRUD)>Přidat.
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).
- V dialogovém okně Přidat kontext dat se vygeneruje název
RazorPagesMovie.Data.RazorPagesMovieContext
třídy. - V rozevíracím seznamu Poskytovatel databáze vyberte SQL Server.
- V dialogovém okně Přidat kontext dat se vygeneruje název
- Vyberte Přidat.
Soubor appsettings.json
se aktualizuje pomocí připojovací řetězec sloužící k připojení k místní databázi.
Upozorňující
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íchaplikacích
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í.
V nabídce Nástroje vyberte Správce balíčků> NuGet Správce balíčků Konzola.
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 vDbContext
. ArgumentInitialCreate
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í metoduUp
v migracích, které nebyly použity. V tomto případě příkaz spustí metoduUp
Migrations/<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 RazorPagesMovieContext
dat:
- 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
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.
Otestujte odkaz Vytvořit nový .
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í.
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
V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> RazorPagesMovie 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.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.
Přidejte balíček
Microsoft.EntityFrameworkCore.Design
NuGet, který je nutný pro nástroj pro generování uživatelského rozhraní.- V nabídce Nástroje vyberte NuGet Správce balíčků> Nabídky NuGet pro řešení.
- Vyberte kartu Procházet.
- Zadejte
Microsoft.EntityFrameworkCore.Design
ho a vyberte ho ze seznamu. - Zkontrolujte Project a pak vyberte Nainstalovat.
- V dialogovém okně Přijetí licence vyberte Možnost Přijmout.
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.
V dialogovém okně Přidat nové generování uživatelského rozhraní vyberte Razor Stránky pomocí entity Framework (CRUD)>Přidat.
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).
- V dialogovém okně Přidat kontext dat se vygeneruje název
RazorPagesMovie.Data.RazorPagesMovieContext
třídy.
- V dialogovém okně Přidat kontext dat se vygeneruje název
- Vyberte Přidat.
Pokud se zobrazí chybová zpráva s informací, že potřebujete balíček nainstalovat
Microsoft.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.
Upozorňující
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íchaplikacích
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í.
V nabídce Nástroje vyberte Správce balíčků> NuGet Správce balíčků Konzola.
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 Up
Migrations/<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 RazorPagesMovieContext
dat:
- 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
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.
Otestujte odkaz Vytvořit nový .
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í.
Ř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
V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> RazorPagesMovie 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 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.
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.
V dialogovém okně Přidat generování uživatelského rozhraní vyberte Razor Stránky pomocí entity Framework (CRUD)>Přidat.
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).
- V dialogovém okně Přidat kontext dat se vygeneruje název
RazorPagesMovie.Data.RazorPagesMovieContext
třídy.
- V dialogovém okně Přidat kontext dat se vygeneruje název
- Vyberte Přidat.
Soubor appsettings.json
se aktualizuje pomocí připojovací řetězec sloužící k připojení k místní databázi.
Upozorňující
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íchaplikacích
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í.
V nabídce Nástroje vyberte Správce balíčků> NuGet Správce balíčků Konzola.
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 Up
Migrations/<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
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.
Otestujte odkaz Vytvořit .
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.
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": "*"
}
V předchozím kódu JSON 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í)
Upozorňující
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íchaplikacích
Přidání datového modelu
Klikněte pravým tlačítkem myši na projekt >RazorPagesMovie 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.
V dialogovém okně Přidat generování uživatelského rozhraní vyberte Razor Stránky pomocí entity Framework (CRUD)>Přidat.
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.
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.
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 .
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í.