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í.
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.
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.
Sestavte projekt, abyste ověřili, že nedošlo k žádným chybám kompilace.
Přidejte složku s názvem Models.
Přidejte třídu do Models složky s názvem Movie.cs.
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 pro zadání primárního klíče pro databázi.
Atribut [DataType] určující typ dat v ReleaseDate poli. S tímto atributem:
Uživatel nemusí do pole 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.
Nástroj pro generování uživatelského rozhraní aspnet-codegenerator.
Nástroje pro čas návrhu pro EF Core
EF Core Zprostředkovatel SQLite, který nainstaluje EF Core balíček jako závislost.
Balíčky potřebné pro generování uživatelského rozhraní: Microsoft.VisualStudio.Web.CodeGeneration.Design a Microsoft.EntityFrameworkCore.SqlServer.
Pokyny k více konfiguracím prostředí, které aplikaci umožňují konfigurovat kontexty databáze podle prostředí, najdete v tématu Použití více prostředí v ASP.NET Core.
Poznámka:
Ve výchozím nastavení architektura binárních souborů .NET, které se mají nainstalovat, představuje aktuálně spuštěnou architekturu operačního systému. Pokud chcete zadat jinou architekturu operačního systému, přečtěte si téma instalace nástroje dotnet, možnost --arch.
Další informace najdete v tématu o problému GitHubu dotnet/AspNetCore.Docs #29262.
V editoru Visual Studio Code stisknutím kláves Ctrl+F5 (Windows) nebo ⌘+F5 (macOS) spusťte aplikaci bez ladění.
Na panelupod oblastí editoru vyberte kartu PROBLÉMY nebo v nabídce Zobrazení vyberte Problémy, pokud aktuálně není v zobrazení. Ověřte, ž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.
Použití SQLite pro vývoj, SQL Server pro produkční prostředí
Když vyberete SQLite, je vygenerovaný kód šablony připravený pro vývoj. Následující kód ukazuje, jak vybrat připojovací řetězec SQLite ve vývoji a SQL Serveru v produkčním prostředí.
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
if (builder.Environment.IsDevelopment())
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductionMovieContext")));
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Předchozí kód ve vývoji nevolá UseDeveloperExceptionPage , protože WebApplication volání UseDeveloperExceptionPage ve vývojovém režimu.
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();
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.UseSqlite(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.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 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.
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í 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.
Klikněte pravým tlačítkem myši na Razorprojekt PagesMovie.csproj a pak vyberte Otevřít v integrovaném terminálu.
Otevře se okno terminálu s příkazovým řádkem v adresáři projektu, který obsahuje soubory Program.cs a .csproj.
Spusťte následující příkaz rozhraní příkazového řádku .NET:
dotnet ef migrations add InitialCreate
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.
Spusťte následující příkaz rozhraní příkazového řádku .NET:
dotnet ef database update
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.
Poznámka:
Pro SQLite je typ sloupce pro Price pole nastaven na TEXThodnotu . Tento problém se vyřeší v pozdějším kroku.
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'.
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();
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.UseSqlite(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.MapStaticAssets();
app.MapRazorPages();
app.Run();
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.
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.
Sestavte projekt, abyste ověřili, že nedošlo k žádným chybám kompilace.
Přidejte složku s názvem Models.
Přidejte třídu do Models složky s názvem Movie.cs.
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 pro zadání primárního klíče pro databázi.
Atribut [DataType] určující typ dat v ReleaseDate poli. S tímto atributem:
Uživatel nemusí do pole 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.
Nástroj pro generování uživatelského rozhraní aspnet-codegenerator.
Nástroje pro čas návrhu pro EF Core
EF Core Zprostředkovatel SQLite, který nainstaluje EF Core balíček jako závislost.
Balíčky potřebné pro generování uživatelského rozhraní: Microsoft.VisualStudio.Web.CodeGeneration.Design a Microsoft.EntityFrameworkCore.SqlServer.
Pokyny k více konfiguracím prostředí, které aplikaci umožňují konfigurovat kontexty databáze podle prostředí, najdete v tématu Použití více prostředí v ASP.NET Core.
Poznámka:
Ve výchozím nastavení architektura binárních souborů .NET, které se mají nainstalovat, představuje aktuálně spuštěnou architekturu operačního systému. Pokud chcete zadat jinou architekturu operačního systému, přečtěte si téma instalace nástroje dotnet, možnost --arch.
Další informace najdete v tématu o problému GitHubu dotnet/AspNetCore.Docs #29262.
V editoru Visual Studio Code stisknutím kláves Ctrl+F5 (Windows) nebo ⌘+F5 (macOS) spusťte aplikaci bez ladění.
Na panelupod oblastí editoru vyberte kartu PROBLÉMY nebo v nabídce Zobrazení vyberte Problémy, pokud aktuálně není v zobrazení. Ověřte, že nedošlo k žádným chybám kompilace.
V okně Nástroje řešení klikněte na projekt PagesMovie a Razorpak vyberte Přidat>novou složku.... Pojmenujte složku Models.
Control-click the Models folder, and then select Add>New Class....
V dialogovém okně Nový soubor :
V levém podokně vyberte Obecné .
V prostředním podokně vyberte prázdnou třídu .
Pojmenujte video třídy a vyberte Vytvořit.
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 pro zadání primárního klíče pro databázi.
Atribut [DataType] určující typ dat v ReleaseDate poli. S tímto atributem:
Uživatel nemusí do pole kalendářního data zadávat informace o čase.
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.
Použití SQLite pro vývoj, SQL Server pro produkční prostředí
Když vyberete SQLite, je vygenerovaný kód šablony připravený pro vývoj. Následující kód ukazuje, jak vybrat připojovací řetězec SQLite ve vývoji a SQL Serveru v produkčním prostředí.
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
if (builder.Environment.IsDevelopment())
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductionMovieContext")));
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Předchozí kód ve vývoji nevolá UseDeveloperExceptionPage , protože WebApplication volání UseDeveloperExceptionPage ve vývojovém režimu.
Přidejte balíček Microsoft.EntityFrameworkCore.SqliteNuGet, který je nutný pro nástroj pro generování uživatelského rozhraní.
V okně Nástroje řešení klikněte na projekt PagesMovie a Razorpak vyberte Otevřít v terminálu.
Otevře se okno Terminálu s příkazovým řádkem v adresáři projektu, který obsahuje soubory Program.cs a .csproj.
Spusťte následující příkaz rozhraní příkazového řádku .NET:
Control-click on the Pages folder >Add>New Folder.
Pojmenujte složku Filmy.
Control-click on the Pages/Movies folder >Add>New Scaffolding....
V dialogovém okně Nové generování uživatelského rozhraní vyberte Razor Stránky využívající Entity Framework (CRUD)>Další.
Dokončete dialogové okno Přidat Razor stránky pomocí entity Framework (CRUD):
Do třídy Model použít: řádek, zadejte Movie.
V DbContext Třídy použít: řádek pojmenujte třídu RazorPagesMovie.Data.RazorPagesMovieContext.
Vyberte Dokončit.
Dokončení procesu generování uživatelského rozhraní může chvíli trvat, protože požadované balíčky se automaticky stáhnou a přidají do projektu.
Soubor appsettings.json se aktualizuje pomocí připojovací řetězec sloužící k připojení k místní databázi.
Použití SQLite pro vývoj, SQL Server pro produkční prostředí
Když vyberete SQLite, je vygenerovaný kód šablony připravený pro vývoj. Následující kód ukazuje, jak vybrat připojovací řetězec SQLite ve vývoji a SQL Serveru v produkčním prostředí.
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
if (builder.Environment.IsDevelopment())
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductionMovieContext")));
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Předchozí kód ve vývoji nevolá UseDeveloperExceptionPage , protože WebApplication volání UseDeveloperExceptionPage ve vývojovém režimu.
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();
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(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 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.
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í 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.
Klikněte pravým tlačítkem myši na Razorprojekt PagesMovie.csproj a pak vyberte Otevřít v integrovaném terminálu.
Otevře se okno terminálu s příkazovým řádkem v adresáři projektu, který obsahuje soubory Program.cs a .csproj.
Spusťte následující příkaz rozhraní příkazového řádku .NET:
dotnet ef migrations add InitialCreate
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.
Spusťte následující příkaz rozhraní příkazového řádku .NET:
dotnet ef database update
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.
Poznámka:
Pro SQLite je typ sloupce pro Price pole nastaven na TEXThodnotu . Tento problém se vyřeší v pozdějším kroku.
Control-click the RazorPagesMovie project, and then select Open in Terminal.
Otevře se okno terminálu s příkazovým řádkem v adresáři projektu, který obsahuje soubory Program.cs a .csproj.
Spusťte následující příkazy rozhraní příkazového řádku .NET:
dotnet tool uninstall --global dotnet-ef
dotnet tool install --global dotnet-ef
dotnet ef migrations add InitialCreate
dotnet ef database update
Příkazy tool nainstalují nejnovější nástroje Entity Framework Core po odinstalaci jakékoli předchozí verze, pokud existuje.
Poznámka:
Ve výchozím nastavení architektura binárních souborů .NET, které se mají nainstalovat, představuje aktuálně spuštěnou architekturu operačního systému. Pokud chcete zadat jinou architekturu operačního systému, přečtěte si téma instalace nástroje dotnet, možnost --arch.
Další informace najdete v tématu o problému GitHubu dotnet/AspNetCore.Docs #29262.
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.
Poznámka:
Pro SQLite je typ sloupce pro Price pole nastaven na TEXThodnotu . Tento problém se vyřeší v pozdějším kroku.
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().
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'.
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();
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(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();
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.
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.
Sestavte projekt, abyste ověřili, že nedošlo k žádným chybám kompilace.
Přidejte složku s názvem Models.
Přidejte třídu do Models složky s názvem Movie.cs.
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 pro zadání primárního klíče pro databázi.
Atribut [DataType] určující typ dat v ReleaseDate poli. S tímto atributem:
Uživatel nemusí do pole 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.
Nástroj pro generování uživatelského rozhraní aspnet-codegenerator.
Nástroje pro čas návrhu pro EF Core
EF Core Zprostředkovatel SQLite, který nainstaluje EF Core balíček jako závislost.
Balíčky potřebné pro generování uživatelského rozhraní: Microsoft.VisualStudio.Web.CodeGeneration.Design a Microsoft.EntityFrameworkCore.SqlServer.
Pokyny k více konfiguracím prostředí, které aplikaci umožňují konfigurovat kontexty databáze podle prostředí, najdete v tématu Použití více prostředí v ASP.NET Core.
Poznámka:
Ve výchozím nastavení architektura binárních souborů .NET, které se mají nainstalovat, představuje aktuálně spuštěnou architekturu operačního systému. Pokud chcete zadat jinou architekturu operačního systému, přečtěte si téma instalace nástroje dotnet, možnost --arch.
Další informace najdete v tématu o problému GitHubu dotnet/AspNetCore.Docs #29262.
V editoru Visual Studio Code stisknutím kláves Ctrl+F5 (Windows) nebo ⌘+F5 (macOS) spusťte aplikaci bez ladění.
Na panelupod oblastí editoru vyberte kartu PROBLÉMY nebo v nabídce Zobrazení vyberte Problémy, pokud aktuálně není v zobrazení. Ověřte, že nedošlo k žádným chybám kompilace.
V okně Nástroje řešení klikněte na projekt PagesMovie a Razorpak vyberte Přidat>novou složku.... Pojmenujte složku Models.
Control-click the Models folder, and then select Add>New Class....
V dialogovém okně Nový soubor :
V levém podokně vyberte Obecné .
V prostředním podokně vyberte prázdnou třídu .
Pojmenujte video třídy a vyberte Vytvořit.
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 pro zadání primárního klíče pro databázi.
Atribut [DataType] určující typ dat v ReleaseDate poli. S tímto atributem:
Uživatel nemusí do pole kalendářního data zadávat informace o čase.
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.
Použití SQLite pro vývoj, SQL Server pro produkční prostředí
Když vyberete SQLite, je vygenerovaný kód šablony připravený pro vývoj. Následující kód ukazuje, jak vybrat připojovací řetězec SQLite ve vývoji a SQL Serveru v produkčním prostředí.
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
if (builder.Environment.IsDevelopment())
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductionMovieContext")));
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Předchozí kód ve vývoji nevolá UseDeveloperExceptionPage , protože WebApplication volání UseDeveloperExceptionPage ve vývojovém režimu.
Přidejte balíček Microsoft.EntityFrameworkCore.SqliteNuGet, který je nutný pro nástroj pro generování uživatelského rozhraní.
V okně Nástroje řešení klikněte na projekt PagesMovie a Razorpak vyberte Otevřít v terminálu.
Otevře se okno Terminálu s příkazovým řádkem v adresáři projektu, který obsahuje soubory Program.cs a .csproj.
Spusťte následující příkaz rozhraní příkazového řádku .NET:
Control-click on the Pages folder >Add>New Folder.
Pojmenujte složku Filmy.
Control-click on the Pages/Movies folder >Add>New Scaffolding....
V dialogovém okně Nové generování uživatelského rozhraní vyberte Razor Stránky využívající Entity Framework (CRUD)>Další.
Dokončete dialogové okno Přidat Razor stránky pomocí entity Framework (CRUD):
Do třídy Model použít: řádek, zadejte Movie.
V DbContext Třídy použít: řádek pojmenujte třídu RazorPagesMovie.Data.RazorPagesMovieContext.
Vyberte Dokončit.
Dokončení procesu generování uživatelského rozhraní může chvíli trvat, protože požadované balíčky se automaticky stáhnou a přidají do projektu.
Soubor appsettings.json se aktualizuje pomocí připojovací řetězec sloužící k připojení k místní databázi.
Použití SQLite pro vývoj, SQL Server pro produkční prostředí
Když vyberete SQLite, je vygenerovaný kód šablony připravený pro vývoj. Následující kód ukazuje, jak vybrat připojovací řetězec SQLite ve vývoji a SQL Serveru v produkčním prostředí.
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
if (builder.Environment.IsDevelopment())
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductionMovieContext")));
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Předchozí kód ve vývoji nevolá UseDeveloperExceptionPage , protože WebApplication volání UseDeveloperExceptionPage ve vývojovém režimu.
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();
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(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 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.
Klikněte pravým tlačítkem myši na Razorprojekt PagesMovie.csproj a pak vyberte Otevřít v integrovaném terminálu.
Otevře se okno terminálu s příkazovým řádkem v adresáři projektu, který obsahuje soubory Program.cs a .csproj.
Spusťte následující příkazy rozhraní příkazového řádku .NET:
dotnet ef migrations add InitialCreate
dotnet ef database update
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.
Poznámka:
Pro SQLite je typ sloupce pro Price pole nastaven na TEXThodnotu . Tento problém se vyřeší v pozdějším kroku.
Control-click the RazorPagesMovie project, and then select Open in Terminal.
Otevře se okno terminálu s příkazovým řádkem v adresáři projektu, který obsahuje soubory Program.cs a .csproj.
Spusťte následující příkazy rozhraní příkazového řádku .NET:
dotnet tool uninstall --global dotnet-ef
dotnet tool install --global dotnet-ef
dotnet ef migrations add InitialCreate
dotnet ef database update
Příkazy tool nainstalují nejnovější nástroje Entity Framework Core po odinstalaci jakékoli předchozí verze, pokud existuje.
Poznámka:
Ve výchozím nastavení architektura binárních souborů .NET, které se mají nainstalovat, představuje aktuálně spuštěnou architekturu operačního systému. Pokud chcete zadat jinou architekturu operačního systému, přečtěte si téma instalace nástroje dotnet, možnost --arch.
Další informace najdete v tématu o problému GitHubu dotnet/AspNetCore.Docs #29262.
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.
Poznámka:
Pro SQLite je typ sloupce pro Price pole nastaven na TEXThodnotu . Tento problém se vyřeší v pozdějším kroku.
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().
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'.
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();
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(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();
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.
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.
Přidejte složku s názvem Models.
Přidejte třídu do Models složky s názvem Movie.cs.
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 pro zadání primárního klíče pro databázi.
Atribut [DataType] určující typ dat v ReleaseDate poli. S tímto atributem:
Uživatel nemusí do pole data zadávat informace o čase.
Zobrazí se pouze datum, nikoli informace o čase.
Přidání balíčků NuGet a nástrojů EF
Spusťte následující příkazy rozhraní příkazového řádku .NET:
Nástroj pro generování uživatelského rozhraní aspnet-codegenerator.
Nástroje pro čas návrhu pro EF Core
EF Core Zprostředkovatel SQLite, který nainstaluje EF Core balíček jako závislost.
Balíčky potřebné pro generování uživatelského rozhraní: Microsoft.VisualStudio.Web.CodeGeneration.Design a Microsoft.EntityFrameworkCore.SqlServer.
Pokyny k více konfiguracím prostředí, které aplikaci umožňují konfigurovat kontexty databáze podle prostředí, najdete v tématu Použití více prostředí v ASP.NET Core.
Poznámka:
Ve výchozím nastavení architektura binárních souborů .NET, které se mají nainstalovat, představuje aktuálně spuštěnou architekturu operačního systému. Pokud chcete zadat jinou architekturu operačního systému, přečtěte si téma instalace nástroje dotnet, možnost --arch.
Další informace najdete v tématu o problému GitHubu dotnet/AspNetCore.Docs #29262.
V okně Nástroje řešení klikněte pravým tlačítkem myši naRazor projekt PagesMovie a pak vyberte Přidat>novou složku.... Pojmenujte složku Models.
Klikněte pravým tlačítkem myši na Models složku a pak vyberte Přidat>nový soubor....
V dialogovém okně Nový soubor :
V levém podokně vyberte Obecné .
V prostředním podokně vyberte prázdnou třídu .
Pojmenujte video třídy a vyberte Vytvořit.
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 pro zadání primárního klíče pro databázi.
Atribut [DataType] určující typ dat v ReleaseDate poli. S tímto atributem:
Uživatel nemusí do pole kalendářního data zadávat informace o čase.
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.DesignNuGet, 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.
Vyberte Přidat.
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.
Otevřete příkazové prostředí pro adresář projektu, který obsahuje soubory Program.cs a .csproj soubory. Spusťte následující příkaz:
Použití SQLite pro vývoj, SQL Server pro produkční prostředí
Když vyberete SQLite, je vygenerovaný kód šablony připravený pro vývoj. Následující kód ukazuje, jak vybrat připojovací řetězec SQLite ve vývoji a SQL Serveru v produkčním prostředí.
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
if (builder.Environment.IsDevelopment())
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductionMovieContext")));
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Předchozí kód ve vývoji nevolá UseDeveloperExceptionPage , protože WebApplication volání UseDeveloperExceptionPage ve vývojovém režimu.
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 na složku> Pages/Movies Add>New Scaffolding....
V dialogovém okně Nové generování uživatelského rozhraní vyberte Razor Stránky využívající Entity Framework (CRUD)>Další.
Dokončete dialogové okno Přidat Razor stránky pomocí entity Framework (CRUD):
Do třídy Model použít: řádek, zadejte Movie.
V DbContext Třídy použít: řádek pojmenujte třídu RazorPagesMovie.Data.RazorPagesMovieContext.
Vyberte Dokončit.
Soubor appsettings.json se aktualizuje pomocí připojovací řetězec sloužící k připojení k místní databázi.
Použití SQLite pro vývoj, SQL Server pro produkční prostředí
Když vyberete SQLite, je vygenerovaný kód šablony připravený pro vývoj. Následující kód ukazuje, jak vybrat připojovací řetězec SQLite ve vývoji a SQL Serveru v produkčním prostředí.
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
if (builder.Environment.IsDevelopment())
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductionMovieContext")));
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Předchozí kód ve vývoji nevolá UseDeveloperExceptionPage , protože WebApplication volání UseDeveloperExceptionPage ve vývojovém režimu.
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();
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.UseSqlite(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
V okně Nástroje řešení klikněte pravým tlačítkem myši naRazor projekt PagesMovie a pak vyberte Otevřít v terminálu.
Otevře se okno terminálu s příkazovým řádkem v adresáři projektu, který obsahuje soubory Program.cs a .csproj.
Spusťte následující příkazy rozhraní příkazového řádku .NET:
dotnet tool install --global dotnet-ef
dotnet ef migrations add InitialCreate
dotnet ef database update
Poznámka:
Ve výchozím nastavení architektura binárních souborů .NET, které se mají nainstalovat, představuje aktuálně spuštěnou architekturu operačního systému. Pokud chcete zadat jinou architekturu operačního systému, přečtěte si téma instalace nástroje dotnet, možnost --arch.
Další informace najdete v tématu o problému GitHubu dotnet/AspNetCore.Docs #29262.
Poznámka:
Pro SQLite je typ sloupce pro Price pole nastaven na TEXThodnotu . Tento problém se vyřeší v pozdějším kroku.
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();
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.UseSqlite(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();
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'.
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í.
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.
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.
Přidejte složku s názvem Models.
Přidejte třídu do Models složky s názvem Movie.cs.
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.
Přidání balíčků NuGet a nástrojů EF
Spusťte následující příkazy rozhraní příkazového řádku .NET:
Nástroj pro generování uživatelského rozhraní aspnet-codegenerator.
Nástroje pro čas návrhu pro EF Core
EF Core Zprostředkovatel SQLite, který nainstaluje EF Core balíček jako závislost.
Balíčky potřebné pro generování uživatelského rozhraní: Microsoft.VisualStudio.Web.CodeGeneration.Design a Microsoft.EntityFrameworkCore.SqlServer.
Pokyny k více konfiguracím prostředí, které aplikaci umožňují konfigurovat kontexty databáze podle prostředí, najdete v tématu Použití více prostředí v ASP.NET Core.
Poznámka:
Ve výchozím nastavení architektura binárních souborů .NET, které se mají nainstalovat, představuje aktuálně spuštěnou architekturu operačního systému. Pokud chcete zadat jinou architekturu operačního systému, přečtěte si téma instalace nástroje dotnet, možnost --arch.
Další informace najdete v tématu o problému GitHubu dotnet/AspNetCore.Docs #29262.
Pokud se zobrazí chyba generování uživatelského rozhraní, ověřte, že moniker cílové architektury (TFM) odpovídá verzi balíčku NuGet v souboru projektu. Například následující soubor projektu používá verzi 5.0 pro .NET a uvedené balíčky NuGet:
V okně Nástroje řešení klikněte na projekt PagesMovie a Razorpak vyberte Přidat>novou složku.... Pojmenujte složku Models.
Control-click the Models folder, and then select Add>New File....
V dialogovém okně Nový soubor :
V levém podokně vyberte Obecné .
V prostředním podokně vyberte prázdnou třídu .
Pojmenujte třídu Movie a vyberte Nový.
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.
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.
Použití SQLite pro vývoj, SQL Server pro produkční prostředí
Když vyberete SQLite, je vygenerovaný kód šablony připravený pro vývoj. Následující kód ukazuje, jak vložit IWebHostEnvironment do Startup. IWebHostEnvironment je vložen, takže ConfigureServices může používat SQLite ve vývoji a SQL Server v produkčním prostředí.
public class Startup
{
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
Environment = env;
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public IWebHostEnvironment Environment { get; }
public void ConfigureServices(IServiceCollection services)
{
if (Environment.IsDevelopment())
{
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(
Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("MovieContext")));
}
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app)
{
if (Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
Vytvořte složku Pages/Movies:
Control-click on the Pages folder >Add>New Folder.
Pojmenujte složku Filmy.
Control-click on the Pages/Movies folder >Add>New Scaffolding....
V dialogovém okně Nové generování uživatelského rozhraní vyberte Razor Stránky využívající Entity Framework (CRUD)>Další.
Dokončete dialogové okno Přidat Razor stránky pomocí entity Framework (CRUD):
V DbContext Třídy použít: řádek pojmenujte třídu RazorPagesMovie.Data.RazorPagesMovieContext.
Vyberte Dokončit.
Soubor appsettings.json se aktualizuje pomocí připojovací řetězec sloužící k připojení k místní databázi.
Použití SQLite pro vývoj, SQL Server pro produkční prostředí
Když vyberete SQLite, je vygenerovaný kód šablony připravený pro vývoj. Následující kód ukazuje, jak vložit IWebHostEnvironment do Startup. IWebHostEnvironment je vložen, takže ConfigureServices může používat SQLite ve vývoji a SQL Server v produkčním prostředí.
public class Startup
{
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
Environment = env;
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public IWebHostEnvironment Environment { get; }
public void ConfigureServices(IServiceCollection services)
{
if (Environment.IsDevelopment())
{
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(
Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("MovieContext")));
}
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app)
{
if (Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
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
Spusťte následující příkazy rozhraní příkazového řádku .NET:
dotnet ef migrations add InitialCreate
dotnet ef database update
Poznámka:
Pro SQLite je typ sloupce pro Price pole nastaven na TEXThodnotu . Tento problém se vyřeší v pozdějším kroku.
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í.
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.
Prozkoumejte metodu Up .
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'.
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:
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.
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.
Přidejte třídu do Models složky s názvem Movie.cs.
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.
Nástroj pro generování uživatelského rozhraní aspnet-codegenerator.
Nástroje Entity Framework Core pro .NET CLI.
EF Core Zprostředkovatel SQLite, který nainstaluje EF Core balíček jako závislost.
Balíčky potřebné pro generování uživatelského rozhraní: Microsoft.VisualStudio.Web.CodeGeneration.Design a Microsoft.EntityFrameworkCore.SqlServer.
Pokyny k více konfiguracím prostředí, které aplikaci umožňují konfigurovat kontexty databáze podle prostředí, najdete v tématu Použití více prostředí v ASP.NET Core.
Poznámka:
Ve výchozím nastavení architektura binárních souborů .NET, které se mají nainstalovat, představuje aktuálně spuštěnou architekturu operačního systému. Pokud chcete zadat jinou architekturu operačního systému, přečtěte si téma instalace nástroje dotnet, možnost --arch.
Další informace najdete v tématu o problému GitHubu dotnet/AspNetCore.Docs #29262.
Pokud se zobrazí chyba generování uživatelského rozhraní, ověřte, že moniker cílové architektury (TFM) odpovídá verzi balíčku NuGet v souboru projektu. Například následující soubor projektu obsahuje verzi 3.1 pro .NET Core a uvedené balíčky NuGet:
RazorV projektu PagesMovie vytvořte novou složku s názvem Data.
Do složky Data přidejte následující RazorPagesMovieContext třídu:
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ří DbSet vlastnost pro sadu entit. V terminologii Entity Framework sada entit obvykle odpovídá databázové tabulce a entita odpovídá řádku v tabulce. Kód se nezkompiluje, dokud nebudou přidány závislosti v pozdějším kroku.
Přidání připojovací řetězec databáze
Přidejte do appsettings.json souboru připojovací řetězec, jak je znázorněno v následujícím zvýrazněném kódu:
Na začátek Startup.cspříkazu přidejte následující using příkazy:
using RazorPagesMovie.Data;
using Microsoft.EntityFrameworkCore;
Zaregistrujte kontext databáze v kontejneru injektáž závislostí v Startup.ConfigureServicessouboru .
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
V okně Nástroje řešení klikněte na projekt PagesMovie a Razorpak vyberte Přidat>novou složku.... Pojmenujte složku Models.
Klikněte pravým tlačítkem myši na Models složku a pak vyberte Přidat>nový soubor....
V dialogovém okně Nový soubor :
V levém podokně vyberte Obecné .
V prostředním podokně vyberte prázdnou třídu .
Pojmenujte třídu Movie a vyberte Nový.
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.
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.
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.
Otevřete příkazové okno v adresáři projektu, který obsahuje Program.cssoubor , Startup.csa .csproj soubory.
Použití SQLite pro vývoj, SQL Server pro produkční prostředí
Když vyberete SQLite, je vygenerovaný kód šablony připravený pro vývoj. Následující kód ukazuje, jak vložit IWebHostEnvironment do startupu. IWebHostEnvironment je vložen, takže ConfigureServices může používat SQLite ve vývoji a SQL Server v produkčním prostředí.
public class Startup
{
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
Environment = env;
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public IWebHostEnvironment Environment { get; }
public void ConfigureServices(IServiceCollection services)
{
if (Environment.IsDevelopment())
{
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(
Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("MovieContext")));
}
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app)
{
if (Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
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 na složku> Pages/Movies Add>New Scaffolding....
V dialogovém okně Nové generování uživatelského rozhraní vyberte Razor Stránky využívající Entity Framework (CRUD)>Další.
Dokončete dialogové okno Přidat Razor stránky pomocí entity Framework (CRUD):
V rozevíracím seznamu Třída modelu vyberte nebo zadejte film (RazorPagesMovie.Models).
Do řádku třídy kontextu dat zadejte název nové třídy 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.
Přidání nástrojů EF
Spusťte následující příkaz rozhraní příkazového řádku .NET:
Ve výchozím nastavení architektura binárních souborů .NET, které se mají nainstalovat, představuje aktuálně spuštěnou architekturu operačního systému. Pokud chcete zadat jinou architekturu operačního systému, přečtěte si téma instalace nástroje dotnet, možnost --arch.
Další informace najdete v tématu o problému GitHubu dotnet/AspNetCore.Docs #29262.
Použití SQLite pro vývoj, SQL Server pro produkční prostředí
Když vyberete SQLite, je vygenerovaný kód šablony připravený pro vývoj. Následující kód ukazuje, jak vložit IWebHostEnvironment do startupu. IWebHostEnvironment je vložen, takže ConfigureServices může používat SQLite ve vývoji a SQL Server v produkčním prostředí.
public class Startup
{
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
Environment = env;
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public IWebHostEnvironment Environment { get; }
public void ConfigureServices(IServiceCollection services)
{
if (Environment.IsDevelopment())
{
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlite(
Configuration.GetConnectionString("RazorPagesMovieContext")));
}
else
{
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("MovieContext")));
}
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app)
{
if (Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
Ve výchozím nastavení architektura binárních souborů .NET, které se mají nainstalovat, představuje aktuálně spuštěnou architekturu operačního systému. Pokud chcete zadat jinou architekturu operačního systému, přečtěte si téma instalace nástroje dotnet, možnost --arch.
Další informace najdete v tématu o problému GitHubu dotnet/AspNetCore.Docs #29262.
Spusťte následující příkazy rozhraní příkazového řádku .NET:
dotnet ef migrations add InitialCreate
dotnet ef database update
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í.
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.
Prozkoumejte metodu Up .
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'.
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í.
Zdroj tohoto obsahu najdete na GitHubu, kde můžete také vytvářet a kontrolovat problémy a žádosti o přijetí změn. Další informace najdete v našem průvodci pro přispěvatele.