Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Note
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z aktualną wersją, zobacz artykuł w wersji .NET 10.
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 ". Definiują właściwości danych przechowywanych w bazie danych.
Dodawanie modelu danych
- w programie Visual Studio
- Visual Studio Code
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy >. Nadaj folderowi
Modelsnazwę .Kliknij prawym przyciskiem
Modelsmyszy folder. Wybierz pozycję Dodaj>klasę. Nadaj klasie nazwę Movie.Dodaj następujące właściwości do
Movieklasy: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
IDjest wymagane przez bazę danych dla klucza podstawowego.Atrybut [DataType], który określa typ danych we
ReleaseDatewł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
stringwskazuje, ż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.
- w programie Visual Studio
- Visual Studio Code
Utwórz folder Pages/Movies:
- Kliknij prawym przyciskiem myszy folder Pages Dodaj>nowy folder>.
- Nadaj folderowi nazwę Filmy.
Kliknij prawym przyciskiem myszy folder > 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.RazorPagesMovieContextklasy. - 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.
Warning
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:
- w programie Visual Studio
- Visual Studio Code
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 programie Visual Studio
- Visual Studio Code
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 InitialCreatePolecenie
Add-Migrationgeneruje kod w celu utworzenia początkowego schematu bazy danych. Schemat jest oparty na modelu określonym w plikuDbContext. ArgumentInitialCreatesł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-DatabasePolecenie
Update-Databaseuruchamia metodęUpw migracjach, które nie zostały zastosowane. W takim przypadku polecenie uruchamia metodęUpwMigrations/<time-stamp>_InitialCreate.cspliku , która tworzy bazę danych.
Kontekst RazorPagesMovieContextdanych:
- 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
Moviemodelu.
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
/Moviesgo 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 .
Note
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:
- w programie Visual Studio
- Visual Studio Code
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ć).
Dalsze 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 ". Definiują właściwości danych przechowywanych w bazie danych.
Dodawanie modelu danych
- w programie Visual Studio
- Visual Studio Code
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy >. Nadaj folderowi
Modelsnazwę .Kliknij prawym przyciskiem
Modelsmyszy folder. Wybierz pozycję Dodaj>klasę. Nadaj klasie nazwę Movie.Dodaj następujące właściwości do
Movieklasy: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
IDjest wymagane przez bazę danych dla klucza podstawowego.Atrybut [DataType], który określa typ danych we
ReleaseDatewł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
stringwskazuje, ż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.
- w programie Visual Studio
- Visual Studio Code
Utwórz folder Pages/Movies:
- Kliknij prawym przyciskiem myszy folder Pages Dodaj>nowy folder>.
- Nadaj folderowi nazwę Filmy.
Kliknij prawym przyciskiem myszy folder > 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.RazorPagesMovieContextklasy. - 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.
Warning
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:
- w programie Visual Studio
- Visual Studio Code
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 programie Visual Studio
- Visual Studio Code
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 InitialCreatePolecenie
Add-Migrationgeneruje kod w celu utworzenia początkowego schematu bazy danych. Schemat jest oparty na modelu określonym w plikuDbContext. ArgumentInitialCreatesł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-DatabasePolecenie
Update-Databaseuruchamia metodęUpw migracjach, które nie zostały zastosowane. W takim przypadku polecenie uruchamia metodęUpwMigrations/<time-stamp>_InitialCreate.cspliku , która tworzy bazę danych.
Kontekst RazorPagesMovieContextdanych:
- 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
Moviemodelu.
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
/Moviesgo 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 .
Note
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:
- w programie Visual Studio
- Visual Studio Code
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ć).
Dalsze 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 ". Definiują właściwości danych przechowywanych w bazie danych.
Dodawanie modelu danych
- w programie Visual Studio
- Visual Studio Code
- Visual Studio dla komputerów Mac
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy >. Nadaj folderowi
Modelsnazwę .Kliknij prawym przyciskiem
Modelsmyszy folder. Wybierz pozycję Dodaj>klasę. Nadaj klasie nazwę Movie.Dodaj następujące właściwości do
Movieklasy: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
IDjest wymagane przez bazę danych dla klucza podstawowego.Atrybut [DataType], który określa typ danych we
ReleaseDatewł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
stringwskazuje, ż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.
- w programie Visual Studio
- Visual Studio Code
- Visual Studio dla komputerów Mac
Utwórz folder Pages/Movies:
- Kliknij prawym przyciskiem myszy folder Pages Dodaj>nowy folder>.
- Nadaj folderowi nazwę Filmy.
Kliknij prawym przyciskiem myszy folder > 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.RazorPagesMovieContextklasy. - 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.
Warning
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:
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
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 programie Visual Studio
- Visual Studio Code
- Visual Studio dla komputerów Mac
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-Migrationgeneruje kod w celu utworzenia początkowego schematu bazy danych. Schemat jest oparty na modelu określonym w plikuDbContext. ArgumentInitialCreatesłuży do nazywania migracji. Można użyć dowolnej nazwy, ale zgodnie z konwencją wybrano nazwę opisjącą migrację.Polecenie
Update-Databaseuruchamia metodęUpw migracjach, które nie zostały zastosowane. W takim przypadku polecenie uruchamia metodęUpwMigrations/<time-stamp>_InitialCreate.cspliku , 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 RazorPagesMovieContextdanych:
- 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
Moviemodelu.
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
/Moviesgo 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 .
Note
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:
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
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ć).
Dalsze 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 ". Definiują właściwości danych przechowywanych w bazie danych.
Dodawanie modelu danych
- w programie Visual Studio
- Visual Studio Code
- Visual Studio dla komputerów Mac
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy >. Nadaj folderowi
Modelsnazwę .Kliknij prawym przyciskiem
Modelsmyszy folder. Wybierz pozycję Dodaj>klasę. Nadaj klasie nazwę Movie.Dodaj następujące właściwości do
Movieklasy: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
IDjest wymagane przez bazę danych dla klucza podstawowego.Atrybut [DataType], który określa typ danych we
ReleaseDatewł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.
- w programie Visual Studio
- Visual Studio Code
- Visual Studio dla komputerów Mac
Dodaj pakiet
Microsoft.EntityFrameworkCore.DesignNuGet, 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.Designi wybierz go z listy. - Zaznacz pozycję Projekt , a następnie wybierz pozycję Zainstaluj
- Wybierz pozycję Akceptuję w oknie dialogowym Akceptacja licencji .
-
W menu Narzędzia wybierz pozycję NuGet Menedżer pakietów> Zarządzanie pakietami NuGet dla rozwiązania
Utwórz folder Pages/Movies:
- Kliknij prawym przyciskiem myszy folder Pages Dodaj>nowy folder>.
- Nadaj folderowi nazwę Filmy.
Kliknij prawym przyciskiem myszy folder > 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.RazorPagesMovieContextklasy.
-
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.SqlServerpakietu, 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.
Warning
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:
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
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 programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
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:
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
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 RazorPagesMovieContextdanych:
- 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
Moviemodelu.
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
/Moviesgo 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 .
Note
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ć).
Dalsze 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 ". Definiują właściwości danych przechowywanych w bazie danych.
Wyświetl lub pobierz przykładowy kod (jak pobrać).
Dodawanie modelu danych
- w programie Visual Studio
- Visual Studio Code
- Visual Studio dla komputerów Mac
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy >. Nadaj folderowi
Modelsnazwę .Kliknij prawym przyciskiem
Modelsmyszy folder. Wybierz pozycję Dodaj>klasę. Nadaj klasie nazwę Movie.Dodaj następujące właściwości do
Movieklasy: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
IDjest 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.
- w programie Visual Studio
- Visual Studio Code
- Visual Studio dla komputerów Mac
Utwórz folder Pages/Movies:
- Kliknij prawym przyciskiem myszy folder Pages Dodaj>nowy folder>.
- Nadaj folderowi nazwę Filmy.
Kliknij prawym przyciskiem myszy folder > 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.RazorPagesMovieContextklasy.
-
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.
Warning
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 programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
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.
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
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
/Moviesgo 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 .
Note
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 i ASP.NET Core oraz ten problem z usługą GitHub.
W następnym samouczku wyjaśniono pliki utworzone przez tworzenie szkieletów.
Dalsze 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ć).
Warning
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
- w programie Visual Studio
- Visual Studio Code
- Visual Studio dla komputerów Mac
Kliknij prawym przyciskiem myszy >. Nadaj folderowi Modelsnazwę .
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
IDjest 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.
- w programie Visual Studio
- Visual Studio Code
- Visual Studio dla komputerów Mac
Utwórz folder Pages/Movies:
- Kliknij prawym przyciskiem myszy folder Pages Dodaj>nowy folder>.
- Nadaj folderowi nazwę Filmy.
Kliknij prawym przyciskiem myszy folder > 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
- w programie Visual Studio
- Visual Studio dla komputerów Mac
- Visual Studio Code
Proces tworzenia szkieletu i aktualizowania następujących plików:
- Strony/filmy: tworzenie, usuwanie, szczegóły, edytowanie i indeks.
Data/RazorPagesMovieContext.cs
Updated
Startup.cs
Utworzone i zaktualizowane pliki zostały wyjaśnione w następnej sekcji.
Migracja początkowa
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
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.
- w programie Visual Studio
- Program Visual Studio Code/Visual Studio dla komputerów Mac
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
/Moviesgo 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 .
Note
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.