Część 2. Dodawanie modelu do Razor aplikacji Pages w programie ASP.NET Core
Uwaga
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.
Ważne
Te informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany, zanim zostanie wydany komercyjnie. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.
W tym samouczku klasy są dodawane do zarządzania filmami w bazie danych. Klasy modeli aplikacji używają platformy Entity Framework Core (EF Core) do pracy z bazą danych. EF Core to maper obiektowo-relacyjny (O/RM), który upraszcza dostęp do danych. Najpierw piszesz klasy modeli i EF Core tworzy bazę danych.
Klasy modelu są znane jako klasy POCO (z "P lain-O ld CLR Objects"), ponieważ nie mają zależności od EF Core. Definiują właściwości danych przechowywanych w bazie danych.
Dodawanie modelu danych
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt> RazorPagesProjekt Dodaj>nowy folder. Nadaj folderowi
Models
nazwę .Kliknij prawym przyciskiem
Models
myszy folder. Wybierz pozycję Dodaj>klasę. Nadaj klasie nazwę Movie.Dodaj następujące właściwości do
Movie
klasy: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; } }
Klasa Movie
zawiera:
Pole
ID
jest wymagane przez bazę danych dla klucza podstawowego.Atrybut [DataType], który określa typ danych we
ReleaseDate
właściwości. Za pomocą tego atrybutu:- Użytkownik nie musi wprowadzać informacji o godzinie w polu daty.
- Wyświetlana jest tylko data, a nie informacje o godzinie.
Znak zapytania po
string
wskazuje, że właściwość jest dopuszczana do wartości null. Aby uzyskać więcej informacji, zobacz Typy referencyjne dopuszczane do wartości null.
Adnotacje danych zostały omówione w późniejszym samouczku.
Skompiluj projekt, aby sprawdzić, czy nie ma błędów kompilacji.
Tworzenie szkieletu modelu filmu
W tej sekcji model filmu jest szkieletowy. Oznacza to, że narzędzie tworzenia szkieletów tworzy strony dla operacji Tworzenia, odczytu, aktualizacji i usuwania (CRUD) dla modelu filmu.
Utwórz folder Pages/Movies:
- Kliknij prawym przyciskiem myszy folder Pages Dodaj>nowy folder>.
- Nadaj folderowi nazwę Filmy.
Kliknij prawym przyciskiem myszy folder >Pages/Movies Dodaj>nowy element szkieletowy.
W oknie dialogowym Dodawanie nowego szkieletu wybierz pozycję Razor Strony przy użyciu programu Entity Framework (CRUD)>Dodaj.
Ukończ okno dialogowe Dodawanie Razor stron przy użyciu programu Entity Framework (CRUD):
- Z listy rozwijanej Klasa modelu wybierz pozycję Movie (RazorPagesFilm.Models).
- W wierszu Klasy kontekstu danych wybierz + znak (plus).
- W oknie dialogowym Dodawanie kontekstu danych jest generowana nazwa
RazorPagesMovie.Data.RazorPagesMovieContext
klasy. - Z listy rozwijanej Dostawca bazy danych wybierz pozycję SQL Server.
- W oknie dialogowym Dodawanie kontekstu danych jest generowana nazwa
- Wybierz Dodaj.
Plik appsettings.json
jest aktualizowany przy użyciu parametry połączenia używanego do nawiązywania połączenia z lokalną bazą danych.
Ostrzeżenie
W tym artykule jest używana lokalna baza danych, która nie wymaga uwierzytelnienia użytkownika. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania dla wdrożonych aplikacji testowych i produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
Pliki utworzone i zaktualizowane
Proces tworzenia szkieletu tworzy następujące pliki:
- Strony/filmy: tworzenie, usuwanie, szczegóły, edytowanie i indeks.
Data/RazorPagesMovieContext.cs
Utworzone pliki zostały wyjaśnione w następnym samouczku.
Proces tworzenia szkieletu Program.cs
dodaje do pliku następujący wyróżniony kod:
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();
Zmiany Program.cs
zostały wyjaśnione w dalszej części tego samouczka.
Tworzenie początkowego schematu bazy danych przy użyciu funkcji migracji ef
Funkcja migracji w programie Entity Framework Core umożliwia:
- Utwórz początkowy schemat bazy danych.
- Przyrostowe aktualizowanie schematu bazy danych w celu zachowania synchronizacji z modelem danych aplikacji. Istniejące dane w bazie danych są zachowywane.
W tej sekcji okno konsoli Menedżer pakietów (PMC) służy do:
Dodaj migrację początkową.
Zaktualizuj bazę danych przy użyciu migracji początkowej.
W menu Narzędzia wybierz pozycję NuGet Menedżer pakietów> Menedżer pakietów Konsola.
W usłudze PMC wprowadź następujące polecenie:
Add-Migration InitialCreate
Polecenie
Add-Migration
generuje kod w celu utworzenia początkowego schematu bazy danych. Schemat jest oparty na modelu określonym w plikuDbContext
. ArgumentInitialCreate
służy do nazywania migracji. Można użyć dowolnej nazwy, ale zgodnie z konwencją wybrano nazwę opisjącą migrację.
Zostanie wyświetlone następujące ostrzeżenie, które zostało rozwiązane w późniejszym kroku:
Nie określono typu dla kolumny dziesiętnej "Price" w typie jednostki "Movie". Spowoduje to dyskretne obcięcie wartości, jeśli nie mieszczą się w domyślnej precyzji i skali. Jawnie określ typ kolumny serwera SQL, który może pomieścić wszystkie wartości przy użyciu polecenia "HasColumnType()".
W usłudze PMC wprowadź następujące polecenie:
Update-Database
Polecenie
Update-Database
uruchamia metodęUp
w migracjach, które nie zostały zastosowane. W takim przypadku polecenie uruchamia metodęUp
wMigrations/<time-stamp>_InitialCreate.cs
pliku , która tworzy bazę danych.
Kontekst RazorPagesMovieContext
danych:
- Pochodzi z Microsoft.EntityFrameworkCore.DbContext.
- Określa, które jednostki są uwzględnione w modelu danych.
- Koordynuje EF Core funkcje, takie jak Tworzenie, Odczyt, Aktualizowanie i Usuwanie dla
Movie
modelu.
Klasa RazorPagesMovieContext
w wygenerowany plik 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!;
}
}
Powyższy kod tworzy właściwość DbSet<Movie> dla zestawu jednostek. W terminologii platformy Entity Framework zestaw jednostek zwykle odpowiada tabeli bazy danych. Jednostka odpowiada wierszowi w tabeli.
Nazwa parametry połączenia jest przekazywana do kontekstu przez wywołanie metody w obiekcie DbContextOptions. W przypadku programowania lokalnego system konfiguracji odczytuje parametry połączenia z appsettings.json
pliku.
Testowanie aplikacji
Uruchom aplikację i dołącz
/Movies
go do adresu URL w przeglądarce (http://localhost:port/movies
).Jeśli wystąpi następujący błąd:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.
Przetestuj link Utwórz nowy .
Uwaga
W polu może nie być możliwe wprowadzenie przecinków dziesiętnych
Price
. Aby obsługiwać walidację jQuery dla ustawień regionalnych innych niż angielski, które używają przecinka (",") dla punktu dziesiętnego i w formatach dat innych niż angielskie stany USA, aplikacja musi zostać zglobalizowana. Aby uzyskać instrukcje dotyczące globalizacji, zobacz ten problem z usługą GitHub.Przetestuj linki Edytuj, Szczegóły i Usuń.
W następnym samouczku wyjaśniono pliki utworzone przez tworzenie szkieletów.
Badanie kontekstu zarejestrowanego za pomocą iniekcji zależności
ASP.NET Core jest kompilowany za pomocą wstrzykiwania zależności. Usługi, takie jak EF Core kontekst bazy danych, są rejestrowane za pomocą wstrzykiwania zależności podczas uruchamiania aplikacji. Składniki, które wymagają tych usług (takich jak Razor Pages), są udostępniane za pomocą parametrów konstruktora. Kod konstruktora, który pobiera wystąpienie kontekstu bazy danych, jest wyświetlany w dalszej części samouczka.
Narzędzie do tworzenia szkieletów automatycznie utworzyło kontekst bazy danych i zarejestrowało je w kontenerze wstrzykiwania zależności. Następujący wyróżniony kod jest dodawany do Program.cs
pliku przez szkielet:
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();
Rozwiązywanie problemów z ukończonym przykładem
Jeśli napotkasz problem, nie możesz go rozwiązać, porównaj kod z ukończonym projektem. Wyświetl lub pobierz ukończony projekt (jak pobrać).
Następne kroki
W tym samouczku klasy są dodawane do zarządzania filmami w bazie danych. Klasy modeli aplikacji używają platformy Entity Framework Core (EF Core) do pracy z bazą danych. EF Core to maper obiektowo-relacyjny (O/RM), który upraszcza dostęp do danych. Najpierw piszesz klasy modeli i EF Core tworzy bazę danych.
Klasy modelu są znane jako klasy POCO (z "P lain-O ld CLR Objects"), ponieważ nie mają zależności od EF Core. Definiują właściwości danych przechowywanych w bazie danych.
Dodawanie modelu danych
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt> RazorPagesProjekt Dodaj>nowy folder. Nadaj folderowi
Models
nazwę .Kliknij prawym przyciskiem
Models
myszy folder. Wybierz pozycję Dodaj>klasę. Nadaj klasie nazwę Movie.Dodaj następujące właściwości do
Movie
klasy: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; } }
Klasa Movie
zawiera:
Pole
ID
jest wymagane przez bazę danych dla klucza podstawowego.Atrybut [DataType], który określa typ danych we
ReleaseDate
właściwości. Za pomocą tego atrybutu:- Użytkownik nie musi wprowadzać informacji o godzinie w polu daty.
- Wyświetlana jest tylko data, a nie informacje o godzinie.
Znak zapytania po
string
wskazuje, że właściwość jest dopuszczana do wartości null. Aby uzyskać więcej informacji, zobacz Typy referencyjne dopuszczane do wartości null.
Adnotacje danych zostały omówione w późniejszym samouczku.
Skompiluj projekt, aby sprawdzić, czy nie ma błędów kompilacji.
Tworzenie szkieletu modelu filmu
W tej sekcji model filmu jest szkieletowy. Oznacza to, że narzędzie tworzenia szkieletów tworzy strony dla operacji Tworzenia, odczytu, aktualizacji i usuwania (CRUD) dla modelu filmu.
Utwórz folder Pages/Movies:
- Kliknij prawym przyciskiem myszy folder Pages Dodaj>nowy folder>.
- Nadaj folderowi nazwę Filmy.
Kliknij prawym przyciskiem myszy folder >Pages/Movies Dodaj>nowy element szkieletowy.
W oknie dialogowym Dodawanie nowego szkieletu wybierz pozycję Razor Strony przy użyciu programu Entity Framework (CRUD)>Dodaj.
Ukończ okno dialogowe Dodawanie Razor stron przy użyciu programu Entity Framework (CRUD):
- Z listy rozwijanej Klasa modelu wybierz pozycję Movie (RazorPagesFilm.Models).
- W wierszu Klasy kontekstu danych wybierz + znak (plus).
- W oknie dialogowym Dodawanie kontekstu danych jest generowana nazwa
RazorPagesMovie.Data.RazorPagesMovieContext
klasy. - Z listy rozwijanej Dostawca bazy danych wybierz pozycję SQL Server.
- W oknie dialogowym Dodawanie kontekstu danych jest generowana nazwa
- Wybierz Dodaj.
Plik appsettings.json
jest aktualizowany przy użyciu parametry połączenia używanego do nawiązywania połączenia z lokalną bazą danych.
Ostrzeżenie
W tym artykule jest używana lokalna baza danych, która nie wymaga uwierzytelnienia użytkownika. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania dla wdrożonych aplikacji testowych i produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
Pliki utworzone i zaktualizowane
Proces tworzenia szkieletu tworzy następujące pliki:
- Strony/filmy: tworzenie, usuwanie, szczegóły, edytowanie i indeks.
Data/RazorPagesMovieContext.cs
Utworzone pliki zostały wyjaśnione w następnym samouczku.
Proces tworzenia szkieletu Program.cs
dodaje do pliku następujący wyróżniony kod:
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();
Zmiany Program.cs
zostały wyjaśnione w dalszej części tego samouczka.
Tworzenie początkowego schematu bazy danych przy użyciu funkcji migracji ef
Funkcja migracji w programie Entity Framework Core umożliwia:
- Utwórz początkowy schemat bazy danych.
- Przyrostowe aktualizowanie schematu bazy danych w celu zachowania synchronizacji z modelem danych aplikacji. Istniejące dane w bazie danych są zachowywane.
W tej sekcji okno konsoli Menedżer pakietów (PMC) służy do:
Dodaj migrację początkową.
Zaktualizuj bazę danych przy użyciu migracji początkowej.
W menu Narzędzia wybierz pozycję NuGet Menedżer pakietów> Menedżer pakietów Konsola.
W usłudze PMC wprowadź następujące polecenie:
Add-Migration InitialCreate
Polecenie
Add-Migration
generuje kod w celu utworzenia początkowego schematu bazy danych. Schemat jest oparty na modelu określonym w plikuDbContext
. ArgumentInitialCreate
służy do nazywania migracji. Można użyć dowolnej nazwy, ale zgodnie z konwencją wybrano nazwę opisjącą migrację.
Zostanie wyświetlone następujące ostrzeżenie, które zostało rozwiązane w późniejszym kroku:
Nie określono typu dla kolumny dziesiętnej "Price" w typie jednostki "Movie". Spowoduje to dyskretne obcięcie wartości, jeśli nie mieszczą się w domyślnej precyzji i skali. Jawnie określ typ kolumny serwera SQL, który może pomieścić wszystkie wartości przy użyciu polecenia "HasColumnType()".
W usłudze PMC wprowadź następujące polecenie:
Update-Database
Polecenie
Update-Database
uruchamia metodęUp
w migracjach, które nie zostały zastosowane. W takim przypadku polecenie uruchamia metodęUp
wMigrations/<time-stamp>_InitialCreate.cs
pliku , która tworzy bazę danych.
Kontekst RazorPagesMovieContext
danych:
- Pochodzi z Microsoft.EntityFrameworkCore.DbContext.
- Określa, które jednostki są uwzględnione w modelu danych.
- Koordynuje EF Core funkcje, takie jak Tworzenie, Odczyt, Aktualizowanie i Usuwanie dla
Movie
modelu.
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!;
}
}
Powyższy kod tworzy właściwość DbSet<Movie> dla zestawu jednostek. W terminologii platformy Entity Framework zestaw jednostek zwykle odpowiada tabeli bazy danych. Jednostka odpowiada wierszowi w tabeli.
Nazwa parametry połączenia jest przekazywana do kontekstu przez wywołanie metody w obiekcie DbContextOptions. W przypadku programowania lokalnego system konfiguracji odczytuje parametry połączenia z appsettings.json
pliku.
Testowanie aplikacji
Uruchom aplikację i dołącz
/Movies
go do adresu URL w przeglądarce (http://localhost:port/movies
).Jeśli wystąpi następujący błąd:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.
Przetestuj link Utwórz nowy .
Uwaga
W polu może nie być możliwe wprowadzenie przecinków dziesiętnych
Price
. Aby obsługiwać walidację jQuery dla ustawień regionalnych innych niż angielski, które używają przecinka (",") dla punktu dziesiętnego i w formatach dat innych niż angielskie stany USA, aplikacja musi zostać zglobalizowana. Aby uzyskać instrukcje dotyczące globalizacji, zobacz ten problem z usługą GitHub.Przetestuj linki Edytuj, Szczegóły i Usuń.
W następnym samouczku wyjaśniono pliki utworzone przez tworzenie szkieletów.
Badanie kontekstu zarejestrowanego za pomocą iniekcji zależności
ASP.NET Core jest kompilowany za pomocą wstrzykiwania zależności. Usługi, takie jak EF Core kontekst bazy danych, są rejestrowane za pomocą wstrzykiwania zależności podczas uruchamiania aplikacji. Składniki, które wymagają tych usług (takich jak Razor Pages), są udostępniane za pomocą parametrów konstruktora. Kod konstruktora, który pobiera wystąpienie kontekstu bazy danych, jest wyświetlany w dalszej części samouczka.
Narzędzie do tworzenia szkieletów automatycznie utworzyło kontekst bazy danych i zarejestrowało je w kontenerze wstrzykiwania zależności. Następujący wyróżniony kod jest dodawany do Program.cs
pliku przez szkielet:
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();
Rozwiązywanie problemów z ukończonym przykładem
Jeśli napotkasz problem, nie możesz go rozwiązać, porównaj kod z ukończonym projektem. Wyświetl lub pobierz ukończony projekt (jak pobrać).
Następne kroki
W tym samouczku klasy są dodawane do zarządzania filmami w bazie danych. Klasy modeli aplikacji używają platformy Entity Framework Core (EF Core) do pracy z bazą danych. EF Core to maper obiektowo-relacyjny (O/RM), który upraszcza dostęp do danych. Najpierw piszesz klasy modeli i EF Core tworzy bazę danych.
Klasy modelu są znane jako klasy POCO (z "P lain-O ld CLR Objects"), ponieważ nie mają zależności od EF Core. Definiują właściwości danych przechowywanych w bazie danych.
Dodawanie modelu danych
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt> RazorPagesProjekt Dodaj>nowy folder. Nadaj folderowi
Models
nazwę .Kliknij prawym przyciskiem
Models
myszy folder. Wybierz pozycję Dodaj>klasę. Nadaj klasie nazwę Movie.Dodaj następujące właściwości do
Movie
klasy: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; } }
Klasa Movie
zawiera:
Pole
ID
jest wymagane przez bazę danych dla klucza podstawowego.Atrybut [DataType], który określa typ danych we
ReleaseDate
właściwości. Za pomocą tego atrybutu:- Użytkownik nie musi wprowadzać informacji o godzinie w polu daty.
- Wyświetlana jest tylko data, a nie informacje o godzinie.
Znak zapytania po
string
wskazuje, że właściwość jest dopuszczana do wartości null. Aby uzyskać więcej informacji, zobacz Typy referencyjne dopuszczane do wartości null.
Adnotacje danych zostały omówione w późniejszym samouczku.
Skompiluj projekt, aby sprawdzić, czy nie ma błędów kompilacji.
Tworzenie szkieletu modelu filmu
W tej sekcji model filmu jest szkieletowy. Oznacza to, że narzędzie tworzenia szkieletów tworzy strony dla operacji Tworzenia, odczytu, aktualizacji i usuwania (CRUD) dla modelu filmu.
Utwórz folder Pages/Movies:
- Kliknij prawym przyciskiem myszy folder Pages Dodaj>nowy folder>.
- Nadaj folderowi nazwę Filmy.
Kliknij prawym przyciskiem myszy folder >Pages/Movies Dodaj>nowy element szkieletowy.
W oknie dialogowym Dodawanie nowego szkieletu wybierz pozycję Razor Strony przy użyciu programu Entity Framework (CRUD)>Dodaj.
Ukończ okno dialogowe Dodawanie Razor stron przy użyciu programu Entity Framework (CRUD):
- Z listy rozwijanej Klasa modelu wybierz pozycję Movie (RazorPagesFilm.Models).
- W wierszu Klasy kontekstu danych wybierz + znak (plus).
- W oknie dialogowym Dodawanie kontekstu danych jest generowana nazwa
RazorPagesMovie.Data.RazorPagesMovieContext
klasy. - Z listy rozwijanej Dostawca bazy danych wybierz pozycję SQL Server.
- W oknie dialogowym Dodawanie kontekstu danych jest generowana nazwa
- Wybierz Dodaj.
Plik appsettings.json
jest aktualizowany przy użyciu parametry połączenia używanego do nawiązywania połączenia z lokalną bazą danych.
Ostrzeżenie
W tym artykule jest używana lokalna baza danych, która nie wymaga uwierzytelnienia użytkownika. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania dla wdrożonych aplikacji testowych i produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
Pliki utworzone i zaktualizowane
Proces tworzenia szkieletu tworzy następujące pliki:
- Strony/filmy: tworzenie, usuwanie, szczegóły, edytowanie i indeks.
Data/RazorPagesMovieContext.cs
Utworzone pliki zostały wyjaśnione w następnym samouczku.
Proces tworzenia szkieletu Program.cs
dodaje do pliku następujący wyróżniony kod:
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();
Zmiany Program.cs
zostały wyjaśnione w dalszej części tego samouczka.
Tworzenie początkowego schematu bazy danych przy użyciu funkcji migracji ef
Funkcja migracji w programie Entity Framework Core umożliwia:
- Utwórz początkowy schemat bazy danych.
- Przyrostowe aktualizowanie schematu bazy danych w celu zachowania synchronizacji z modelem danych aplikacji. Istniejące dane w bazie danych są zachowywane.
W tej sekcji okno konsoli Menedżer pakietów (PMC) służy do:
- Dodaj migrację początkową.
- Zaktualizuj bazę danych przy użyciu migracji początkowej.
W menu Narzędzia wybierz pozycję NuGet Menedżer pakietów> Menedżer pakietów Konsola.
W usłudze PMC wprowadź następujące polecenia:
Add-Migration InitialCreate Update-Database
Polecenie
Add-Migration
generuje kod w celu utworzenia początkowego schematu bazy danych. Schemat jest oparty na modelu określonym w plikuDbContext
. ArgumentInitialCreate
służy do nazywania migracji. Można użyć dowolnej nazwy, ale zgodnie z konwencją wybrano nazwę opisjącą migrację.Polecenie
Update-Database
uruchamia metodęUp
w migracjach, które nie zostały zastosowane. W takim przypadku polecenie uruchamia metodęUp
wMigrations/<time-stamp>_InitialCreate.cs
pliku , która tworzy bazę danych.
Zostanie wyświetlone następujące ostrzeżenie, które zostało rozwiązane w późniejszym kroku:
Nie określono typu dla kolumny dziesiętnej "Price" w typie jednostki "Movie". Spowoduje to dyskretne obcięcie wartości, jeśli nie mieszczą się w domyślnej precyzji i skali. Jawnie określ typ kolumny serwera SQL, który może pomieścić wszystkie wartości przy użyciu polecenia "HasColumnType()".
Kontekst RazorPagesMovieContext
danych:
- Pochodzi z Microsoft.EntityFrameworkCore.DbContext.
- Określa, które jednostki są uwzględnione w modelu danych.
- Koordynuje EF Core funkcje, takie jak Tworzenie, Odczyt, Aktualizowanie i Usuwanie dla
Movie
modelu.
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!;
}
}
Powyższy kod tworzy właściwość DbSet<Movie> dla zestawu jednostek. W terminologii platformy Entity Framework zestaw jednostek zwykle odpowiada tabeli bazy danych. Jednostka odpowiada wierszowi w tabeli.
Nazwa parametry połączenia jest przekazywana do kontekstu przez wywołanie metody w obiekcie DbContextOptions. W przypadku programowania lokalnego system konfiguracji odczytuje parametry połączenia z appsettings.json
pliku.
Testowanie aplikacji
Uruchom aplikację i dołącz
/Movies
go do adresu URL w przeglądarce (http://localhost:port/movies
).Jeśli wystąpi następujący błąd:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.
Przetestuj link Utwórz nowy .
Uwaga
W polu może nie być możliwe wprowadzenie przecinków dziesiętnych
Price
. Aby obsługiwać walidację jQuery dla ustawień regionalnych innych niż angielski, które używają przecinka (",") dla punktu dziesiętnego i w formatach dat innych niż angielskie stany USA, aplikacja musi zostać zglobalizowana. Aby uzyskać instrukcje dotyczące globalizacji, zobacz ten problem z usługą GitHub.Przetestuj linki Edytuj, Szczegóły i Usuń.
W następnym samouczku wyjaśniono pliki utworzone przez tworzenie szkieletów.
Badanie kontekstu zarejestrowanego za pomocą iniekcji zależności
ASP.NET Core jest kompilowany za pomocą wstrzykiwania zależności. Usługi, takie jak EF Core kontekst bazy danych, są rejestrowane za pomocą wstrzykiwania zależności podczas uruchamiania aplikacji. Składniki, które wymagają tych usług (takich jak Razor Pages), są udostępniane za pomocą parametrów konstruktora. Kod konstruktora, który pobiera wystąpienie kontekstu bazy danych, jest wyświetlany w dalszej części samouczka.
Narzędzie do tworzenia szkieletów automatycznie utworzyło kontekst bazy danych i zarejestrowało je w kontenerze wstrzykiwania zależności. Następujący wyróżniony kod jest dodawany do Program.cs
pliku przez szkielet:
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();
Rozwiązywanie problemów z ukończonym przykładem
Jeśli napotkasz problem, nie możesz go rozwiązać, porównaj kod z ukończonym projektem. Wyświetl lub pobierz ukończony projekt (jak pobrać).
Następne kroki
W tym samouczku klasy są dodawane do zarządzania filmami w bazie danych. Klasy modeli aplikacji używają platformy Entity Framework Core (EF Core) do pracy z bazą danych. EF Core to maper obiektowo-relacyjny (O/RM), który upraszcza dostęp do danych. Najpierw piszesz klasy modeli i EF Core tworzy bazę danych.
Klasy modelu są znane jako klasy POCO (z "P lain-O ld CLR Objects"), ponieważ nie mają zależności od EF Core. Definiują właściwości danych przechowywanych w bazie danych.
Dodawanie modelu danych
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt> RazorPagesProjekt Dodaj>nowy folder. Nadaj folderowi
Models
nazwę .Kliknij prawym przyciskiem
Models
myszy folder. Wybierz pozycję Dodaj>klasę. Nadaj klasie nazwę Movie.Dodaj następujące właściwości do
Movie
klasy: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; } } }
Klasa Movie
zawiera:
Pole
ID
jest wymagane przez bazę danych dla klucza podstawowego.Atrybut [DataType], który określa typ danych we
ReleaseDate
właściwości. Za pomocą tego atrybutu:- Użytkownik nie musi wprowadzać informacji o godzinie w polu daty.
- Wyświetlana jest tylko data, a nie informacje o godzinie.
Adnotacje danych zostały omówione w późniejszym samouczku.
Skompiluj projekt, aby sprawdzić, czy nie ma błędów kompilacji.
Tworzenie szkieletu modelu filmu
W tej sekcji model filmu jest szkieletowy. Oznacza to, że narzędzie tworzenia szkieletów tworzy strony dla operacji Tworzenia, odczytu, aktualizacji i usuwania (CRUD) dla modelu filmu.
Dodaj pakiet
Microsoft.EntityFrameworkCore.Design
NuGet, który jest wymagany dla narzędzia do tworzenia szkieletów.- W menu Narzędzia wybierz pozycję NuGet Menedżer pakietów> Zarządzanie pakietami NuGet dla rozwiązania
- Wybierz kartę Przeglądaj.
- Wprowadź
Microsoft.EntityFrameworkCore.Design
i wybierz go z listy. - Zaznacz pozycję Projekt , a następnie wybierz pozycję Zainstaluj
- Wybierz pozycję Akceptuję w oknie dialogowym Akceptacja licencji .
Utwórz folder Pages/Movies:
- Kliknij prawym przyciskiem myszy folder Pages Dodaj>nowy folder>.
- Nadaj folderowi nazwę Filmy.
Kliknij prawym przyciskiem myszy folder >Pages/Movies Dodaj>nowy element szkieletowy.
W oknie dialogowym Dodawanie nowego szkieletu wybierz pozycję Razor Strony przy użyciu programu Entity Framework (CRUD)>Dodaj.
Ukończ okno dialogowe Dodawanie Razor stron przy użyciu programu Entity Framework (CRUD):
- Z listy rozwijanej Klasa modelu wybierz pozycję Movie (RazorPagesFilm.Models).
- W wierszu Klasy kontekstu danych wybierz + znak (plus).
- W oknie dialogowym Dodawanie kontekstu danych jest generowana nazwa
RazorPagesMovie.Data.RazorPagesMovieContext
klasy.
- W oknie dialogowym Dodawanie kontekstu danych jest generowana nazwa
- Wybierz Dodaj.
Jeśli zostanie wyświetlony komunikat o błędzie informujący o konieczności zainstalowania
Microsoft.EntityFrameworkCore.SqlServer
pakietu, powtórz kroki rozpoczynające się od polecenia Dodaj>nowy element szkieletowy.
Plik appsettings.json
jest aktualizowany przy użyciu parametry połączenia używanego do nawiązywania połączenia z lokalną bazą danych.
Ostrzeżenie
W tym artykule jest używana lokalna baza danych, która nie wymaga uwierzytelnienia użytkownika. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania dla wdrożonych aplikacji testowych i produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
Pliki utworzone i zaktualizowane
Proces tworzenia szkieletu tworzy następujące pliki:
- Strony/filmy: tworzenie, usuwanie, szczegóły, edytowanie i indeks.
Data/RazorPagesMovieContext.cs
Utworzone pliki zostały wyjaśnione w następnym samouczku.
Proces tworzenia szkieletu Program.cs
dodaje do pliku następujący wyróżniony kod:
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();
Zmiany Program.cs
zostały wyjaśnione w dalszej części tego samouczka.
Tworzenie początkowego schematu bazy danych przy użyciu funkcji migracji ef
Funkcja migracji w programie Entity Framework Core umożliwia:
- Utwórz początkowy schemat bazy danych.
- Przyrostowe aktualizowanie schematu bazy danych w celu zachowania synchronizacji z modelem danych aplikacji. Istniejące dane w bazie danych są zachowywane.
W tej sekcji okno konsoli Menedżer pakietów (PMC) służy do:
- Dodaj migrację początkową.
- Zaktualizuj bazę danych przy użyciu migracji początkowej.
W menu Narzędzia wybierz pozycję NuGet Menedżer pakietów> Menedżer pakietów Konsola.
W usłudze PMC wprowadź następujące polecenia:
Add-Migration InitialCreate Update-Database
Poprzednie polecenia instalują narzędzia Entity Framework Core i uruchamiają migrations
polecenie w celu wygenerowania kodu tworzącego początkowy schemat bazy danych.
Zostanie wyświetlone następujące ostrzeżenie, które zostało rozwiązane w późniejszym kroku:
Nie określono typu dla kolumny dziesiętnej "Price" w typie jednostki "Movie". Spowoduje to dyskretne obcięcie wartości, jeśli nie mieszczą się w domyślnej precyzji i skali. Jawnie określ typ kolumny serwera SQL, który może pomieścić wszystkie wartości przy użyciu polecenia "HasColumnType()".
Polecenie migrations
generuje kod w celu utworzenia początkowego schematu bazy danych. Schemat jest oparty na modelu określonym w pliku DbContext
. Argument InitialCreate
służy do nazywania migracji. Można użyć dowolnej nazwy, ale zgodnie z konwencją wybrano nazwę opisjącą migrację.
Polecenie update
uruchamia metodę Up
w migracjach, które nie zostały zastosowane. W takim przypadku update
uruchamia metodę Up
w Migrations/<time-stamp>_InitialCreate.cs
pliku, która tworzy bazę danych.
Badanie kontekstu zarejestrowanego za pomocą iniekcji zależności
ASP.NET Core jest kompilowany za pomocą wstrzykiwania zależności. Usługi, takie jak EF Core kontekst bazy danych, są rejestrowane za pomocą wstrzykiwania zależności podczas uruchamiania aplikacji. Składniki, które wymagają tych usług (takich jak Razor Pages), są udostępniane za pomocą parametrów konstruktora. Kod konstruktora, który pobiera wystąpienie kontekstu bazy danych, jest wyświetlany w dalszej części samouczka.
Narzędzie do tworzenia szkieletów automatycznie utworzyło kontekst bazy danych i zarejestrowało je w kontenerze wstrzykiwania zależności. Następujący wyróżniony kod jest dodawany do Program.cs
pliku przez szkielet:
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();
Kontekst RazorPagesMovieContext
danych:
- Pochodzi z Microsoft.EntityFrameworkCore.DbContext.
- Określa, które jednostki są uwzględnione w modelu danych.
- Koordynuje EF Core funkcje, takie jak Tworzenie, Odczyt, Aktualizowanie i Usuwanie dla
Movie
modelu.
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; }
}
}
Powyższy kod tworzy właściwość DbSet<Movie> dla zestawu jednostek. W terminologii platformy Entity Framework zestaw jednostek zwykle odpowiada tabeli bazy danych. Jednostka odpowiada wierszowi w tabeli.
Nazwa parametry połączenia jest przekazywana do kontekstu przez wywołanie metody w obiekcie DbContextOptions. W przypadku programowania lokalnego system konfiguracji odczytuje parametry połączenia z appsettings.json
pliku.
Testowanie aplikacji
Uruchom aplikację i dołącz
/Movies
go do adresu URL w przeglądarce (http://localhost:port/movies
).Jeśli wystąpi następujący błąd:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.
Przetestuj link Utwórz nowy .
Uwaga
W polu może nie być możliwe wprowadzenie przecinków dziesiętnych
Price
. Aby obsługiwać walidację jQuery dla ustawień regionalnych innych niż angielski, które używają przecinka (",") dla punktu dziesiętnego i w formatach dat innych niż angielskie stany USA, aplikacja musi zostać zglobalizowana. Aby uzyskać instrukcje dotyczące globalizacji, zobacz ten problem z usługą GitHub.Przetestuj linki Edytuj, Szczegóły i Usuń.
W następnym samouczku wyjaśniono pliki utworzone przez tworzenie szkieletów.
Rozwiązywanie problemów z ukończonym przykładem
Jeśli napotkasz problem, nie możesz go rozwiązać, porównaj kod z ukończonym projektem. Wyświetl lub pobierz ukończony projekt (jak pobrać).
Następne kroki
W tej sekcji klasy są dodawane do zarządzania filmami w bazie danych. Klasy modeli aplikacji używają platformy Entity Framework Core (EF Core) do pracy z bazą danych. EF Core to maper obiektowo-relacyjny (O/RM), który upraszcza dostęp do danych. Najpierw piszesz klasy modeli i EF Core tworzy bazę danych.
Klasy modelu są znane jako klasy POCO (z "P lain-O ld CLR Objects"), ponieważ nie mają zależności od EF Core. Definiują właściwości danych przechowywanych w bazie danych.
Wyświetl lub pobierz przykładowy kod (jak pobrać).
Dodawanie modelu danych
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt> RazorPagesProjekt Dodaj>nowy folder. Nadaj folderowi
Models
nazwę .Kliknij prawym przyciskiem
Models
myszy folder. Wybierz pozycję Dodaj>klasę. Nadaj klasie nazwę Movie.Dodaj następujące właściwości do
Movie
klasy: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; } } }
Klasa Movie
zawiera:
Pole
ID
jest wymagane przez bazę danych dla klucza podstawowego.[DataType(DataType.Date)]
: Atrybut [DataType] określa typ danych (Date
). Za pomocą tego atrybutu:- Użytkownik nie musi wprowadzać informacji o godzinie w polu daty.
- Wyświetlana jest tylko data, a nie informacje o godzinie.
Adnotacje danych zostały omówione w późniejszym samouczku.
Skompiluj projekt, aby sprawdzić, czy nie ma błędów kompilacji.
Tworzenie szkieletu modelu filmu
W tej sekcji model filmu jest szkieletowy. Oznacza to, że narzędzie tworzenia szkieletów tworzy strony dla operacji Tworzenia, odczytu, aktualizacji i usuwania (CRUD) dla modelu filmu.
Utwórz folder Pages/Movies:
- Kliknij prawym przyciskiem myszy folder Pages Dodaj>nowy folder>.
- Nadaj folderowi nazwę Filmy.
Kliknij prawym przyciskiem myszy folder >Pages/Movies Dodaj>nowy element szkieletowy.
W oknie dialogowym Dodawanie szkieletu wybierz pozycję Razor Strony przy użyciu programu Entity Framework (CRUD)>Dodaj.
Ukończ okno dialogowe Dodawanie Razor stron przy użyciu programu Entity Framework (CRUD):
- Z listy rozwijanej Klasa modelu wybierz pozycję Movie (RazorPagesFilm.Models).
- W wierszu Klasy kontekstu danych wybierz + znak (plus).
- W oknie dialogowym Dodawanie kontekstu danych jest generowana nazwa
RazorPagesMovie.Data.RazorPagesMovieContext
klasy.
- W oknie dialogowym Dodawanie kontekstu danych jest generowana nazwa
- Wybierz Dodaj.
Plik appsettings.json
jest aktualizowany przy użyciu parametry połączenia używanego do nawiązywania połączenia z lokalną bazą danych.
Ostrzeżenie
W tym artykule jest używana lokalna baza danych, która nie wymaga uwierzytelnienia użytkownika. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania dla wdrożonych aplikacji testowych i produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
Pliki utworzone i zaktualizowane
Proces tworzenia szkieletu tworzy następujące pliki:
- Strony/filmy: tworzenie, usuwanie, szczegóły, edytowanie i indeks.
Data/RazorPagesMovieContext.cs
Zaktualizowane pliki
Startup.cs
Utworzone i zaktualizowane pliki zostały wyjaśnione w następnej sekcji.
Tworzenie początkowego schematu bazy danych przy użyciu funkcji migracji ef
Funkcja migracji w programie Entity Framework Core umożliwia:
- Utwórz początkowy schemat bazy danych.
- Przyrostowe aktualizowanie schematu bazy danych w celu zachowania synchronizacji z modelem danych aplikacji. Istniejące dane w bazie danych są zachowywane.
W tej sekcji okno konsoli Menedżer pakietów (PMC) służy do:
- Dodaj migrację początkową.
- Zaktualizuj bazę danych przy użyciu migracji początkowej.
W menu Narzędzia wybierz pozycję NuGet Menedżer pakietów> Menedżer pakietów Konsola.
W usłudze PMC wprowadź następujące polecenia:
Add-Migration InitialCreate Update-Database
W przypadku programu SQL Server powyższe polecenia generują następujące ostrzeżenie: "Nie określono typu dla kolumny dziesiętnej "Price" dla typu jednostki "Movie". Spowoduje to dyskretne obcięcie wartości, jeśli nie mieszczą się w domyślnej precyzji i skali. Jawnie określ typ kolumny programu SQL Server, który może pomieścić wszystkie wartości przy użyciu polecenia "HasColumnType()".
Zignoruj ostrzeżenie, ponieważ zostanie ono rozwiązane w późniejszym kroku.
Polecenie migrations
generuje kod w celu utworzenia początkowego schematu bazy danych. Schemat jest oparty na modelu określonym w pliku DbContext
. Argument InitialCreate
służy do nazywania migracji. Można użyć dowolnej nazwy, ale zgodnie z konwencją wybrano nazwę opisjącą migrację.
Polecenie update
uruchamia metodę Up
w migracjach, które nie zostały zastosowane. W takim przypadku update
uruchamia metodę Up
w Migrations/<time-stamp>_InitialCreate.cs
pliku, która tworzy bazę danych.
Badanie kontekstu zarejestrowanego za pomocą iniekcji zależności
ASP.NET Core jest kompilowany za pomocą wstrzykiwania zależności. Usługi, takie jak EF Core kontekst bazy danych, są rejestrowane za pomocą wstrzykiwania zależności podczas uruchamiania aplikacji. Składniki, które wymagają tych usług (takich jak Razor Pages), są udostępniane za pomocą parametrów konstruktora. Kod konstruktora, który pobiera wystąpienie kontekstu bazy danych, jest wyświetlany w dalszej części samouczka.
Narzędzie do tworzenia szkieletów automatycznie utworzyło kontekst bazy danych i zarejestrowało je w kontenerze wstrzykiwania zależności.
Zbadaj metodę Startup.ConfigureServices
. Wyróżniony wiersz został dodany przez szkielet:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
Funkcje RazorPagesMovieContext
współrzędnych EF Core , takie jak Create, Read, Update i Delete, dla Movie
modelu. Kontekst danych (RazorPagesMovieContext
) pochodzi z elementu Microsoft.EntityFrameworkCore.DbContext. Kontekst danych określa, które jednostki są uwzględnione w modelu danych.
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; }
}
}
Powyższy kod tworzy właściwość DbSet<Movie> dla zestawu jednostek. W terminologii platformy Entity Framework zestaw jednostek zwykle odpowiada tabeli bazy danych. Jednostka odpowiada wierszowi w tabeli.
Nazwa parametry połączenia jest przekazywana do kontekstu przez wywołanie metody w obiekcie DbContextOptions. W przypadku programowania lokalnego system konfiguracji odczytuje parametry połączenia z appsettings.json
pliku.
Testowanie aplikacji
Uruchom aplikację i dołącz
/Movies
go do adresu URL w przeglądarce (http://localhost:port/movies
).Jeśli wystąpi następujący błąd:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.
Przetestuj link Utwórz .
Uwaga
W polu może nie być możliwe wprowadzenie przecinków dziesiętnych
Price
. Aby obsługiwać walidację jQuery dla ustawień regionalnych innych niż angielski, które używają przecinka (",") dla punktu dziesiętnego i w formatach dat innych niż angielskie stany USA, aplikacja musi zostać zglobalizowana. Aby uzyskać instrukcje dotyczące globalizacji, zobacz ten problem z usługą GitHub.Przetestuj linki Edytuj, Szczegóły i Usuń.
Rejestrowanie SQL platformy Entity Framework Core
Konfiguracja rejestrowania jest często dostarczana za pomocą sekcji Logging
plików appsettings.{Environment}.json
. Aby zarejestrować instrukcje SQL, dodaj "Microsoft.EntityFrameworkCore.Database.Command": "Information"
do appsettings.Development.json
pliku:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDB-2;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
,"Microsoft.EntityFrameworkCore.Database.Command": "Information"
}
},
"AllowedHosts": "*"
}
Po wcześniejszym kodzie JSON instrukcje SQL są wyświetlane w wierszu polecenia i w oknie danych wyjściowych programu Visual Studio.
Aby uzyskać więcej informacji, zobacz Rejestrowanie na platformie .NET Core i ASP.NET Core oraz ten problem z usługą GitHub.
W następnym samouczku wyjaśniono pliki utworzone przez tworzenie szkieletów.
Następne kroki
W tej sekcji klasy są dodawane do zarządzania filmami. Klasy modeli aplikacji używają platformy Entity Framework Core (EF Core) do pracy z bazą danych. EF Core to maper obiektowo-relacyjny (O/RM), który upraszcza dostęp do danych.
Klasy modelu są nazywane klasami POCO (z "zwykłych obiektów CLR"), ponieważ nie mają żadnej zależności od EF Coreklasy . Definiują właściwości danych przechowywanych w bazie danych.
Wyświetl lub pobierz przykładowy kod (jak pobrać).
Ostrzeżenie
W tym artykule jest używana lokalna baza danych, która nie wymaga uwierzytelnienia użytkownika. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania dla wdrożonych aplikacji testowych i produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
Dodawanie modelu danych
Kliknij prawym przyciskiem myszy projekt >RazorPagesProjekt Dodaj>nowy folder. Nadaj folderowi Models
nazwę .
Kliknij prawym przyciskiem Models
myszy folder. Wybierz pozycję Dodaj>klasę. Nadaj klasie nazwę Movie.
Dodaj następujące właściwości do Movie
klasy:
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; }
}
}
Klasa Movie
zawiera:
Pole
ID
jest wymagane przez bazę danych dla klucza podstawowego.[DataType(DataType.Date)]
: Atrybut DataType określa typ danych (Date
). Za pomocą tego atrybutu:- Użytkownik nie musi wprowadzać informacji o godzinie w polu daty.
- Wyświetlana jest tylko data, a nie informacje o godzinie.
Adnotacje danych zostały omówione w późniejszym samouczku.
Adnotacje danych zostały omówione w późniejszym samouczku.
Skompiluj projekt, aby sprawdzić, czy nie ma błędów kompilacji.
Tworzenie szkieletu modelu filmu
W tej sekcji model filmu jest szkieletowy. Oznacza to, że narzędzie tworzenia szkieletów tworzy strony dla operacji Tworzenia, odczytu, aktualizacji i usuwania (CRUD) dla modelu filmu.
Utwórz folder Pages/Movies:
- Kliknij prawym przyciskiem myszy folder Pages Dodaj>nowy folder>.
- Nadaj folderowi nazwę Filmy.
Kliknij prawym przyciskiem myszy folder >Pages/Movies Dodaj>nowy element szkieletowy.
W oknie dialogowym Dodawanie szkieletu wybierz pozycję Razor Strony przy użyciu programu Entity Framework (CRUD)>Dodaj.
Ukończ okno dialogowe Dodawanie Razor stron przy użyciu programu Entity Framework (CRUD):
- Z listy rozwijanej Klasa modelu wybierz pozycję Movie (RazorPagesFilm.Models).
- W wierszu Klasy kontekstu danych wybierz + znak (plus) i zmień wygenerowaną nazwę z RazorPagesFilm.
Models
. RazorPagesFilmContext do RazorPagesFilm.Dane. RazorPagesFilmContext. Ta zmiana nie jest wymagana. Tworzy klasę kontekstu bazy danych z poprawną przestrzenią nazw. - Wybierz Dodaj.
Plik appsettings.json
jest aktualizowany przy użyciu parametry połączenia używanego do nawiązywania połączenia z lokalną bazą danych.
Utworzone pliki
Proces tworzenia szkieletu i aktualizowania następujących plików:
- Strony/filmy: tworzenie, usuwanie, szczegóły, edytowanie i indeks.
Data/RazorPagesMovieContext.cs
Po aktualizacji
Startup.cs
Utworzone i zaktualizowane pliki zostały wyjaśnione w następnej sekcji.
Migracja początkowa
W tej sekcji jest używana konsola Menedżer pakietów (PMC):
- Dodaj migrację początkową.
- Zaktualizuj bazę danych przy użyciu migracji początkowej.
W menu Narzędzia wybierz pozycję NuGet Menedżer pakietów> Menedżer pakietów Konsola.
W usłudze PMC wprowadź następujące polecenia:
Add-Migration InitialCreate
Update-Database
Powyższe polecenia generują następujące ostrzeżenie: "Nie określono typu dla kolumny dziesiętnej "Price" dla typu jednostki "Movie". Spowoduje to dyskretne obcięcie wartości, jeśli nie mieszczą się w domyślnej precyzji i skali. Jawnie określ typ kolumny programu SQL Server, który może pomieścić wszystkie wartości przy użyciu polecenia "HasColumnType()".
Zignoruj ostrzeżenie, ponieważ zostanie ono rozwiązane w późniejszym kroku.
Polecenie migracji generuje kod w celu utworzenia początkowego schematu bazy danych. Schemat jest oparty na modelu określonym w pliku DbContext
. Argument InitialCreate
służy do nazywania migracji. Można użyć dowolnej nazwy, ale zgodnie z konwencją wybrano nazwę opisjącą migrację.
Polecenie update
uruchamia metodę Up
w migracjach, które nie zostały zastosowane. W takim przypadku update
uruchamia metodę Up
w Migrations/<time-stamp>_InitialCreate.cs
pliku, która tworzy bazę danych.
Badanie kontekstu zarejestrowanego za pomocą iniekcji zależności
ASP.NET Core jest kompilowany za pomocą wstrzykiwania zależności. Usługi, takie jak EF Core kontekst bazy danych, są rejestrowane za pomocą wstrzykiwania zależności podczas uruchamiania aplikacji. Składniki, które wymagają tych usług, takich jak Razor Pages, są udostępniane za pomocą parametrów konstruktora. Kod konstruktora, który pobiera wystąpienie kontekstu bazy danych, jest wyświetlany w dalszej części samouczka.
Narzędzie do tworzenia szkieletów automatycznie utworzyło kontekst bazy danych i zarejestrowało je w kontenerze wstrzykiwania zależności.
Zbadaj metodę Startup.ConfigureServices
. Wyróżniony wiersz został dodany przez szkielet:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
Funkcje RazorPagesMovieContext
współrzędnych EF Core , takie jak Create, Read, Update i Delete, dla Movie
modelu. Kontekst danych (RazorPagesMovieContext
) pochodzi z elementu Microsoft.EntityFrameworkCore.DbContext. Kontekst danych określa, które jednostki są uwzględnione w modelu danych.
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; }
}
}
Powyższy kod tworzy właściwość DbSet<Movie> dla zestawu jednostek. W terminologii platformy Entity Framework zestaw jednostek zwykle odpowiada tabeli bazy danych. Jednostka odpowiada wierszowi w tabeli.
Nazwa parametry połączenia jest przekazywana do kontekstu przez wywołanie metody w obiekcie DbContextOptions. W przypadku programowania lokalnego system konfiguracji odczytuje parametry połączenia z appsettings.json
pliku.
Testowanie aplikacji
- Uruchom aplikację i dołącz
/Movies
go do adresu URL w przeglądarce (http://localhost:port/movies
).
Jeśli zostanie wyświetlony komunikat o błędzie:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
Login failed for user 'User-name'.
Krok migracji został pominięty.
Przetestuj link Utwórz .
Uwaga
W polu może nie być możliwe wprowadzenie przecinków dziesiętnych
Price
. Aby obsługiwać walidację jQuery dla ustawień regionalnych innych niż angielski, które używają przecinka (",") dla punktu dziesiętnego i w formatach dat innych niż angielskie stany USA, aplikacja musi zostać zglobalizowana. Aby uzyskać instrukcje dotyczące globalizacji, zobacz ten problem z usługą GitHub.Przetestuj linki Edytuj, Szczegóły i Usuń.
W następnym samouczku wyjaśniono pliki utworzone przez tworzenie szkieletów.