Udostępnij za pośrednictwem


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.

Ostrzeżenie

Ta wersja ASP.NET Core nie jest już obsługiwana. Aby uzyskać więcej informacji, zobacz zasady pomocy technicznej platformy .NET i platformy .NET Core. 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

  1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt> RazorPagesProjekt Dodaj>nowy folder. Nadaj folderowi Modelsnazwę .

  2. Kliknij prawym przyciskiem Models myszy folder. Wybierz pozycję Dodaj>klasę. Nadaj klasie nazwę Movie.

  3. 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.

  1. Utwórz folder Pages/Movies:

    1. Kliknij prawym przyciskiem myszy folder Pages Dodaj>nowy folder>.
    2. Nadaj folderowi nazwę Filmy.
  2. Kliknij prawym przyciskiem myszy folder >Pages/Movies Dodaj>nowy element szkieletowy.

    Nowy element szkieletowy

  3. W oknie dialogowym Dodawanie nowego szkieletu wybierz pozycję Razor Strony przy użyciu programu Entity Framework (CRUD)>Dodaj.

    Dodawanie szkieletu

  4. Ukończ okno dialogowe Dodawanie Razor stron przy użyciu programu Entity Framework (CRUD):

    1. Z listy rozwijanej Klasa modelu wybierz pozycję Movie (RazorPagesFilm.Models).
    2. W wierszu Klasy kontekstu danych wybierz + znak (plus).
      1. W oknie dialogowym Dodawanie kontekstu danych jest generowana nazwa RazorPagesMovie.Data.RazorPagesMovieContext klasy.
      2. Z listy rozwijanej Dostawca bazy danych wybierz pozycję SQL Server.
    3. Wybierz Dodaj.

    Dodawanie Razor stron

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.

    Menu PMC

  • 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 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ę.

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 w Migrations/<time-stamp>_InitialCreate.cs pliku , 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 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

  1. 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'.
    

    Krok migracji został pominięty.

  2. Przetestuj link Utwórz nowy .

    Tworzenie strony

    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.

  3. 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

  1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt> RazorPagesProjekt Dodaj>nowy folder. Nadaj folderowi Modelsnazwę .

  2. Kliknij prawym przyciskiem Models myszy folder. Wybierz pozycję Dodaj>klasę. Nadaj klasie nazwę Movie.

  3. 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.

  1. Utwórz folder Pages/Movies:

    1. Kliknij prawym przyciskiem myszy folder Pages Dodaj>nowy folder>.
    2. Nadaj folderowi nazwę Filmy.
  2. Kliknij prawym przyciskiem myszy folder >Pages/Movies Dodaj>nowy element szkieletowy.

    Nowy element szkieletowy

  3. W oknie dialogowym Dodawanie nowego szkieletu wybierz pozycję Razor Strony przy użyciu programu Entity Framework (CRUD)>Dodaj.

    Dodawanie szkieletu

  4. Ukończ okno dialogowe Dodawanie Razor stron przy użyciu programu Entity Framework (CRUD):

    1. Z listy rozwijanej Klasa modelu wybierz pozycję Movie (RazorPagesFilm.Models).
    2. W wierszu Klasy kontekstu danych wybierz + znak (plus).
      1. W oknie dialogowym Dodawanie kontekstu danych jest generowana nazwa RazorPagesMovie.Data.RazorPagesMovieContext klasy.
      2. Z listy rozwijanej Dostawca bazy danych wybierz pozycję SQL Server.
    3. Wybierz Dodaj.

    Dodawanie Razor stron

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.

    Menu PMC

  • 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 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ę.

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 w Migrations/<time-stamp>_InitialCreate.cs pliku , 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 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

  1. 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'.
    

    Krok migracji został pominięty.

  2. Przetestuj link Utwórz nowy .

    Tworzenie strony

    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.

  3. 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

  1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt> RazorPagesProjekt Dodaj>nowy folder. Nadaj folderowi Modelsnazwę .

  2. Kliknij prawym przyciskiem Models myszy folder. Wybierz pozycję Dodaj>klasę. Nadaj klasie nazwę Movie.

  3. 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.

  1. Utwórz folder Pages/Movies:

    1. Kliknij prawym przyciskiem myszy folder Pages Dodaj>nowy folder>.
    2. Nadaj folderowi nazwę Filmy.
  2. Kliknij prawym przyciskiem myszy folder >Pages/Movies Dodaj>nowy element szkieletowy.

    Nowy element szkieletowy

  3. W oknie dialogowym Dodawanie nowego szkieletu wybierz pozycję Razor Strony przy użyciu programu Entity Framework (CRUD)>Dodaj.

    Dodawanie szkieletu

  4. Ukończ okno dialogowe Dodawanie Razor stron przy użyciu programu Entity Framework (CRUD):

    1. Z listy rozwijanej Klasa modelu wybierz pozycję Movie (RazorPagesFilm.Models).
    2. W wierszu Klasy kontekstu danych wybierz + znak (plus).
      1. W oknie dialogowym Dodawanie kontekstu danych jest generowana nazwa RazorPagesMovie.Data.RazorPagesMovieContext klasy.
      2. Z listy rozwijanej Dostawca bazy danych wybierz pozycję SQL Server.
    3. Wybierz Dodaj.

    Dodawanie Razor stron

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.
  1. W menu Narzędzia wybierz pozycję NuGet Menedżer pakietów> Menedżer pakietów Konsola.

    Menu PMC

  2. 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 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-Database uruchamia metodę Up w migracjach, które nie zostały zastosowane. W takim przypadku polecenie uruchamia metodę Up w Migrations/<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 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 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

  1. 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'.
    

    Krok migracji został pominięty.

  2. Przetestuj link Utwórz nowy .

    Tworzenie strony

    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.

  3. 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

  1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt> RazorPagesProjekt Dodaj>nowy folder. Nadaj folderowi Modelsnazwę .

  2. Kliknij prawym przyciskiem Models myszy folder. Wybierz pozycję Dodaj>klasę. Nadaj klasie nazwę Movie.

  3. 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.

  1. Dodaj pakiet Microsoft.EntityFrameworkCore.DesignNuGet, który jest wymagany dla narzędzia do tworzenia szkieletów.

    1. W menu Narzędzia wybierz pozycję NuGet Menedżer pakietów> Zarządzanie pakietami NuGet dla rozwiązaniaMenedżer pakietów NuGet — zarządzanie
    2. Wybierz kartę Przeglądaj.
    3. Wprowadź Microsoft.EntityFrameworkCore.Design i wybierz go z listy.
    4. Zaznacz pozycję Projekt , a następnie wybierz pozycję Zainstaluj
    5. Wybierz pozycję Akceptuję w oknie dialogowym Akceptacja licencji . Menedżer pakietów NuGet — dodawanie pakietu
  2. Utwórz folder Pages/Movies:

    1. Kliknij prawym przyciskiem myszy folder Pages Dodaj>nowy folder>.
    2. Nadaj folderowi nazwę Filmy.
  3. Kliknij prawym przyciskiem myszy folder >Pages/Movies Dodaj>nowy element szkieletowy.

    Nowy element szkieletowy

  4. W oknie dialogowym Dodawanie nowego szkieletu wybierz pozycję Razor Strony przy użyciu programu Entity Framework (CRUD)>Dodaj.

    Dodawanie szkieletu

  5. Ukończ okno dialogowe Dodawanie Razor stron przy użyciu programu Entity Framework (CRUD):

    1. Z listy rozwijanej Klasa modelu wybierz pozycję Movie (RazorPagesFilm.Models).
    2. W wierszu Klasy kontekstu danych wybierz + znak (plus).
      1. W oknie dialogowym Dodawanie kontekstu danych jest generowana nazwa RazorPagesMovie.Data.RazorPagesMovieContext klasy.
    3. Wybierz Dodaj.

    Dodawanie Razor stron

    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.
  1. W menu Narzędzia wybierz pozycję NuGet Menedżer pakietów> Menedżer pakietów Konsola.

    Menu PMC

  2. 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 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 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

  1. 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'.
    

    Krok migracji został pominięty.

  2. Przetestuj link Utwórz nowy .

    Tworzenie strony

    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.

  3. 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

  1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt> RazorPagesProjekt Dodaj>nowy folder. Nadaj folderowi Modelsnazwę .

  2. Kliknij prawym przyciskiem Models myszy folder. Wybierz pozycję Dodaj>klasę. Nadaj klasie nazwę Movie.

  3. 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.

  1. Utwórz folder Pages/Movies:

    1. Kliknij prawym przyciskiem myszy folder Pages Dodaj>nowy folder>.
    2. Nadaj folderowi nazwę Filmy.
  2. Kliknij prawym przyciskiem myszy folder >Pages/Movies Dodaj>nowy element szkieletowy.

    Nowy element szkieletowy

  3. W oknie dialogowym Dodawanie szkieletu wybierz pozycję Razor Strony przy użyciu programu Entity Framework (CRUD)>Dodaj.

    Dodawanie szkieletu

  4. Ukończ okno dialogowe Dodawanie Razor stron przy użyciu programu Entity Framework (CRUD):

    1. Z listy rozwijanej Klasa modelu wybierz pozycję Movie (RazorPagesFilm.Models).
    2. W wierszu Klasy kontekstu danych wybierz + znak (plus).
      1. W oknie dialogowym Dodawanie kontekstu danych jest generowana nazwa RazorPagesMovie.Data.RazorPagesMovieContext klasy.
    3. Wybierz Dodaj.

    Dodawanie Razor stron

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.
  1. W menu Narzędzia wybierz pozycję NuGet Menedżer pakietów> Menedżer pakietów Konsola.

    Menu PMC

  2. 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

  1. 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'.
    

    Krok migracji został pominięty.

  2. Przetestuj link Utwórz .

    Tworzenie strony

    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.

  3. 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 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 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.

Nowy element szkieletowy w programie VScode

W oknie dialogowym Dodawanie szkieletu wybierz pozycję Razor Strony przy użyciu programu Entity Framework (CRUD)>Dodaj.

Dodawanie szkieletu w programie VScode

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.

Dodawanie Razor stron w programie VScode

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.

Menu PMC

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 .

    Tworzenie strony

    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.

Następne kroki