Teil 2: Hinzufügen eines Modells zu einer Razor Pages-App in ASP.NET CorePart 2, add a model to a Razor Pages app in ASP.NET Core

Von Rick AndersonBy Rick Anderson

In diesem Abschnitt werden Klassen für die Verwaltung von Filmen in einer Datenbank hinzugefügt.In this section, classes are added for managing movies in a database. Die Modellklassen der App verwenden Entity Framework Core (EF Core), um mit der Datenbank zu arbeiten.The app's model classes use Entity Framework Core (EF Core) to work with the database. EF Core ist ein objektrelationaler Mapper (O/RM), der den Datenzugriff vereinfacht.EF Core is an object-relational mapper (O/RM) that simplifies data access. Sie schreiben zuerst die Modellklassen. Anschließend erstellt EF Core die Datenbank.You write the model classes first, and EF Core creates the database.

Die Modellklassen werden als POCO-Klassen (von „P lain-O ld C LR O bjects“) bezeichnet, da sie keinerlei Abhängigkeit von EF Core aufweisen.The model classes are known as POCO classes (from "P lain-O ld C LR O bjects") because they don't have a dependency on EF Core. Sie definieren die Eigenschaften einer Datei, die in der Datenbank gespeichert ist.They define the properties of the data that are stored in the database.

Zeigen Sie Beispielcode an, oder laden Sie diesen herunter (Vorgehensweise zum Herunterladen).View or download sample code (how to download).

Hinzufügen eines DatenmodellsAdd a data model

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt RazorPagesMovie. Klicken Sie dann auf Hinzufügen > Neuer Ordner.In Solution Explorer, right-click the RazorPagesMovie project > Add > New Folder. Geben Sie dem Ordner den Namen Modelle.Name the folder Models.

  2. Klicken Sie mit der rechten Maustaste auf den Ordner Modelle.Right-click the Models folder. Wählen Sie Hinzufügen > Klasse aus.Select Add > Class. Nennen Sie die Klasse Movie.Name the class Movie.

  3. Fügen Sie der Klasse Movie die folgenden Eigenschaften hinzu:Add the following properties to the Movie class:

    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; }
        }
    }
    

Die Movie-Klasse enthält:The Movie class contains:

  • Die Datenbank benötigt das Feld ID für den primären Schlüssel.The ID field is required by the database for the primary key.

  • [DataType(DataType.Date)]: Das Attribut [DataType] gibt den Typ der Daten (Date) an.[DataType(DataType.Date)]: The [DataType] attribute specifies the type of the data (Date). Mit diesem Attribut:With this attribute:

    • Der Benutzer muss keine Zeitinformationen in das Datumsfeld eingeben.The user isn't required to enter time information in the date field.
    • Nur das Datum wird angezeigt, keine Zeitinformationen.Only the date is displayed, not time information.

DataAnnotations werden in einem späteren Tutorial behandelt.DataAnnotations are covered in a later tutorial.

Erstellen Sie das Projekt, um sicherzustellen, dass keine Kompilierungsfehler vorliegen.Build the project to verify there are no compilation errors.

Erstellen des Gerüsts für das FilmmodellScaffold the movie model

In diesem Abschnitt wird das Gerüst für das Filmmodell erstellt.In this section, the movie model is scaffolded. Mit dem Tool für den Gerüstbau werden Seiten für die Vorgänge „Create“ (Erstellen), „Read“ (Lesen), „Update“ (Aktualisieren) und „Delete“ (Löschen), kurz CRUD-Vorgänge, für das Filmmodell erstellt.That is, the scaffolding tool produces pages for Create, Read, Update, and Delete (CRUD) operations for the movie model.

  1. Erstellen Sie den Ordner Pages/Movies:Create a Pages/Movies folder:

    1. Klicken Sie mit der rechten Maustaste auf den Ordner Pages. Klicken Sie dann auf Hinzufügen > Neuer Ordner.Right-click on the Pages folder > Add > New Folder.
    2. Nennen Sie den Ordner Movies.Name the folder Movies.
  2. Klicken Sie mit der rechten Maustaste auf den Ordner Pages/Movies. Klicken Sie dann auf Hinzufügen > Neues Gerüstelement.Right-click on the Pages/Movies folder > Add > New Scaffolded Item.

    Abbildung der vorherigen Anweisungen.

  3. Klicken Sie im Dialogfeld Gerüst hinzufügen auf Razor-Seiten mithilfe des Entity Frameworks (CRUD) > Hinzufügen.In the Add Scaffold dialog, select Razor Pages using Entity Framework (CRUD) > Add.

    Abbildung der vorherigen Anweisungen.

  4. Vervollständigen Sie das Dialogfeld Add Razor Pages using Entity Framework (CRUD) (Razor-Seiten mithilfe des Entity Frameworks (CRUD) hinzufügen):Complete the Add Razor Pages using Entity Framework (CRUD) dialog:

    1. Wählen Sie in der Dropdownliste Modellklasse den Eintrag Film (RazorPagesMovie.Models) aus.In the Model class drop down, select Movie (RazorPagesMovie.Models).
    2. Wählen Sie in der Zeile Datenkontextklasse das + -Zeichen (Pluszeichen) aus.In the Data context class row, select the + (plus) sign.
      1. Im Dialogfeld Datenkontext hinzufügen wird der Klassenname RazorPagesMovie.Data.RazorPagesMovieContext generiert.In the Add Data Context dialog, the class name RazorPagesMovie.Data.RazorPagesMovieContext is generated.
    3. Wählen Sie Hinzufügen aus.Select Add.

    Abbildung der vorherigen Anweisungen.

Die Datei appsettings.json wird mit der Verbindungszeichenfolge aktualisiert, die zum Herstellen einer Verbindung mit einer lokalen Datenbank verwendet wird.The appsettings.json file is updated with the connection string used to connect to a local database.

Erstellte DateienFiles created

Der Gerüstprozess erstellt und ändert folgende Dateien:The scaffold process creates and updates the following files:

  • Pages/Movies: „Create“, „Delete“, „Details“, „Edit“ und „Index“Pages/Movies: Create, Delete, Details, Edit, and Index.
  • Data/RazorPagesMovieContext.csData/RazorPagesMovieContext.cs

AktualisiertUpdated

  • Startup.csStartup.cs

Die erstellten und aktualisierten Daten werden im nächsten Abschnitt erläutert.The created and updated files are explained in the next section.

Erstellen des anfängliche, Datenbankschema mithilfe des EF-Features „Migrationen“Create the initial database schema using EF's migration feature

Das Feature „Migrationen“ in Entity Framework Core ermöglicht Folgendes:The migrations feature in Entity Framework Core provides a way to:

  • Erstellen des anfänglichen DatenbankschemasCreate the initial database schema.
  • Schrittweises Aktualisieren des Datenbankschemas, um es mit dem Datenmodell der Anwendung synchron zu halten.Incrementally update the database schema to keep it in sync with the application's data model. In der Datenbank vorhandene Daten werden beibehalten.Existing data in the database is preserved.

In diesem Abschnitt wird das Fenster Paket-Manager-Konsole (Package Manager Console, PMC) für Folgendes verwendet:In this section, the Package Manager Console (PMC) window is used to:

  • Fügen Sie eine anfängliche Migration hinzu.Add an initial migration.
  • Aktualisieren Sie die Datenbank mit der anfänglichen Migration.Update the database with the initial migration.
  1. Wählen Sie im Menü Tools NuGet-Paket-Manager > Paket-Manager-Konsole aus.From the Tools menu, select NuGet Package Manager > Package Manager Console.

    PMC-Menü

  2. Geben Sie in der PMC die folgenden Befehle ein:In the PMC, enter the following commands:

    Add-Migration InitialCreate
    Update-Database
    

Mit den vorherigen Befehlen wird die folgende Warnung erstellt: "No type was specified for the decimal column 'Price' on entity type 'Movie'.The preceding commands generate the following warning: "No type was specified for the decimal column 'Price' on entity type 'Movie'. Dadurch werden Werte automatisch abgeschnitten, falls diese nicht der Standardgenauigkeit und -skalierung entsprechen.This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'." („Für die Spalte „Price“ mit Dezimalwerten beim Entitätstyp „Movie“ wurde kein Typ angegeben. Dadurch werden Werte automatisch abgeschnitten, falls diese nicht der Standardgenauigkeit und -skalierung entsprechen. Geben Sie den Spaltentyp von SQL-Server an, der durch „ForHasColumnType()“ sämtliche Werte unterstützen kann.")Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'."

Ignorieren Sie die Warnung, da sie in einem späteren Schritt behandelt wird.Ignore the warning, as it will be addressed in a later step.

Mit dem Befehl migrations wird Code generiert, um das anfängliche Datenbankschema zu erstellen.The migrations command generates code to create the initial database schema. Das Schema basiert auf dem Modell, das in DbContext angegeben ist.The schema is based on the model specified in DbContext. Das Argument InitialCreate wird verwendet, um die Migrationen zu benennen.The InitialCreate argument is used to name the migrations. Es kann jeder Name verwendet werden, aber per Konvention wird ein Name ausgewählt, der die Migration beschreibt.Any name can be used, but by convention a name is selected that describes the migration.

Der update-Befehl führt die Up-Methode in Migrationen aus, die nicht angewendet wurden.The update command runs the Up method in migrations that have not been applied. In diesem Fall führt update die Up-Methode in der Datei Migrations/<time-stamp>_InitialCreate.cs aus, mit der die Datenbank erstellt wird.In this case, update runs the Up method in the Migrations/<time-stamp>_InitialCreate.cs file, which creates the database.

Überprüfen des mit Dependency Injection registrierten KontextsExamine the context registered with dependency injection

ASP.NET Core wird mit Dependency Injection erstellt.ASP.NET Core is built with dependency injection. Dienste wie der EF Core-Datenbankkontext werden über Abhängigkeitsinjektion (Dependency Injection) beim Anwendungsstart registriert.Services, such as the EF Core database context, are registered with dependency injection during application startup. Komponenten, die diese Dienste erfordern (z. B. Razor Pages), werden von diesen Diensten über Konstruktorparameter bereitgestellt.Components that require these services (such as Razor Pages) are provided these services via constructor parameters. Der Konstruktorcode, der eine Datenbankkontextinstanz abruft, wird später in diesem Tutorial erläutert.The constructor code that gets a database context instance is shown later in the tutorial.

Das Tool für den Gerüstbau hat automatisch einen Datenbankkontext erstellt und diesen beim Dependency Injection-Container registriert.The scaffolding tool automatically created a database context and registered it with the dependency injection container.

Untersuchen Sie die Methode Startup.ConfigureServices.Examine the Startup.ConfigureServices method. Die hervorgehobene Zeile wurde vom Gerüst hinzugefügt:The highlighted line was added by the scaffolder:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();

    services.AddDbContext<RazorPagesMovieContext>(options =>
      options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}

Der RazorPagesMovieContext koordiniert die EF Core-Funktionen (Create, Read, Update und Delete) für das Movie-Modell.The RazorPagesMovieContext coordinates EF Core functionality, such as Create, Read, Update and Delete, for the Movie model. Der Datenkontext (RazorPagesMovieContext) wird aus Microsoft.EntityFrameworkCore.DbContext abgeleitet.The data context (RazorPagesMovieContext) is derived from Microsoft.EntityFrameworkCore.DbContext. Der Datenkontext gibt an, welche Entitäten im Datenmodell enthalten sind.The data context specifies which entities are included in the data model.

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; }
    }
}

Der vorangehende Code erstellt eine DbSet<Movie>-Eigenschaft für die Entitätsmenge.The preceding code creates a DbSet<Movie> property for the entity set. In der Terminologie von Entity Framework entspricht eine Entitätenmenge in der Regel einer Datenbanktabelle.In Entity Framework terminology, an entity set typically corresponds to a database table. Entitäten entsprechen Zeilen in Tabellen.An entity corresponds to a row in the table.

Der Name der Verbindungszeichenfolge wird an den Kontext übergeben, indem Sie eine Methode auf einem DbContextOptions-Objekt aufrufen.The name of the connection string is passed in to the context by calling a method on a DbContextOptions object. Für die lokale Entwicklung liest das -Konfigurationssystem die Verbindungszeichenfolge aus der Datei appsettings.json .For local development, the Configuration system reads the connection string from the appsettings.json file.

Testen der AppTest the app

  1. Führen Sie die App aus, und fügen Sie /Movies an die URL im Browser an (http://localhost:port/movies).Run the app and append /Movies to the URL in the browser (http://localhost:port/movies).

    Möglicherweise wird eine Fehlermeldung wie diese angezeigt:If you receive the following error:

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    Sie haben den Migrationsschritt verpasst.You missed the migrations step.

  2. Testen Sie den Link Create (Erstellen).Test the Create link.

    Seite „Create“

    Hinweis

    Sie können unter Umständen in das Feld Price keine Kommas als Dezimaltrennzeichen eingeben.You may not be able to enter decimal commas in the Price field. Zur Unterstützung der jQuery-Validierung für Gebietsschemas mit einer anderen Sprache als Englisch, in denen ein Komma („,“) als Dezimaltrennzeichen verwendet wird, und für Datums- und Uhrzeitformate, die nicht dem US-englischen Format entsprechen, muss die App globalisiert werden.To support jQuery validation for non-English locales that use a comma (",") for a decimal point and for non US-English date formats, the app must be globalized. Globalisierungsanweisungen finden Sie unter GitHub-Problem.For globalization instructions, see this GitHub issue.

  3. Testen Sie die Links Edit (Bearbeiten), Details und Delete (Löschen).Test the Edit, Details, and Delete links.

Im nächsten Tutorial finden Sie Erläuterungen zu den Dateien, die durch den Gerüstbau erstellt wurden.The next tutorial explains the files created by scaffolding.

Zusätzliche RessourcenAdditional resources

In diesem Abschnitt werden Klassen für die Verwaltung von Filmen hinzugefügt.In this section, classes are added for managing movies. Die Modellklassen der App verwenden Entity Framework Core (EF Core), um mit der Datenbank zu arbeiten.The app's model classes use Entity Framework Core (EF Core) to work with the database. EF Core ist ein objektrelationaler Mapper (O/RM), der den Datenzugriff vereinfacht.EF Core is an object-relational mapper (O/RM) that simplifies data access.

Die Modellklassen werden als POCO-Klassen (von „Plain-Old CLR Objects“) bezeichnet, da sie keinerlei Abhängigkeit von EF Core aufweisen.The model classes are known as POCO classes (from "plain-old CLR objects") because they don't have any dependency on EF Core. Sie definieren die Eigenschaften einer Datei, die in der Datenbank gespeichert ist.They define the properties of the data that are stored in the database.

Zeigen Sie Beispielcode an, oder laden Sie diesen herunter (Vorgehensweise zum Herunterladen).View or download sample code (how to download).

Hinzufügen eines DatenmodellsAdd a data model

Klicken Sie mit der rechten Maustaste auf das Projekt RazorPagesMovie und dann auf Hinzufügen > Neuer Ordner.Right-click the RazorPagesMovie project > Add > New Folder. Geben Sie dem Ordner den Namen Modelle.Name the folder Models.

Klicken Sie mit der rechten Maustaste auf den Ordner Modelle.Right-click the Models folder. Wählen Sie Hinzufügen > Klasse aus.Select Add > Class. Nennen Sie die Klasse Movie.Name the class Movie.

Fügen Sie der Klasse Movie die folgenden Eigenschaften hinzu:Add the following properties to the Movie class:

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; }
    }
}

Die Movie-Klasse enthält:The Movie class contains:

  • Die Datenbank benötigt das Feld ID für den primären Schlüssel.The ID field is required by the database for the primary key.

  • [DataType(DataType.Date)]: Das DataType-Attribut gibt den Typ der Daten (Date) an.[DataType(DataType.Date)]: The DataType attribute specifies the type of the data (Date). Mit diesem Attribut:With this attribute:

    • Es ist nicht erforderlich, dass der Benutzer Zeitinformationen in das Datumsfeld eingibt.The user is not required to enter time information in the date field.
    • Nur das Datum wird angezeigt, keine Zeitinformationen.Only the date is displayed, not time information.

DataAnnotations werden in einem späteren Tutorial behandelt.DataAnnotations are covered in a later tutorial.

DataAnnotations werden in einem späteren Tutorial behandelt.DataAnnotations are covered in a later tutorial.

Erstellen Sie das Projekt, um sicherzustellen, dass keine Kompilierungsfehler vorliegen.Build the project to verify there are no compilation errors.

Erstellen des Gerüsts für das FilmmodellScaffold the movie model

In diesem Abschnitt wird das Gerüst für das Filmmodell erstellt.In this section, the movie model is scaffolded. Mit dem Tool für den Gerüstbau werden Seiten für die Vorgänge „Create“ (Erstellen), „Read“ (Lesen), „Update“ (Aktualisieren) und „Delete“ (Löschen), kurz CRUD-Vorgänge, für das Filmmodell erstellt.That is, the scaffolding tool produces pages for Create, Read, Update, and Delete (CRUD) operations for the movie model.

Erstellen Sie den Ordner Pages/Movies:Create a Pages/Movies folder:

  • Klicken Sie mit der rechten Maustaste auf den Ordner Pages. Klicken Sie dann auf Hinzufügen > Neuer Ordner.Right-click on the Pages folder > Add > New Folder.
  • Nennen Sie den Ordner Movies.Name the folder Movies.

Klicken Sie mit der rechten Maustaste auf den Ordner Pages/Movies. Klicken Sie dann auf Hinzufügen > Neues Gerüstelement.Right-click on the Pages/Movies folder > Add > New Scaffolded Item.

Abbildung der vorherigen Anweisungen.

Klicken Sie im Dialogfeld Gerüst hinzufügen auf Razor-Seiten mithilfe des Entity Frameworks (CRUD) > Hinzufügen.In the Add Scaffold dialog, select Razor Pages using Entity Framework (CRUD) > Add.

Abbildung der vorherigen Anweisungen.

Vervollständigen Sie das Dialogfeld Add Razor Pages using Entity Framework (CRUD) (Razor-Seiten mithilfe des Entity Frameworks (CRUD) hinzufügen):Complete the Add Razor Pages using Entity Framework (CRUD) dialog:

  • Wählen Sie in der Dropdownliste Modellklasse den Eintrag Film (RazorPagesMovie.Models) aus.In the Model class drop down, select Movie (RazorPagesMovie.Models).
  • Klicken Sie in der Zeile Datenkontextklasse auf das Pluszeichen + , und ändern Sie den generierten Namen von RazorPagesMovie.Models.RazorPagesMovieContext in RazorPagesMovie.Data.RazorPagesMovieContext.In the Data context class row, select the + (plus) sign and change the generated name from RazorPagesMovie.Models.RazorPagesMovieContext to RazorPagesMovie.Data.RazorPagesMovieContext. Dieses Änderung ist nicht erforderlich.This change is not required. Sie erstellt die Datenbank-Kontextklasse mit dem korrekten Namespace.It creates the database context class with the correct namespace.
  • Wählen Sie Hinzufügen aus.Select Add.

Abbildung der vorherigen Anweisungen.

Die Datei appsettings.json wird mit der Verbindungszeichenfolge aktualisiert, die zum Herstellen einer Verbindung mit einer lokalen Datenbank verwendet wird.The appsettings.json file is updated with the connection string used to connect to a local database.

Erstellte DateienFiles created

Der Gerüstprozess erstellt und ändert folgende Dateien:The scaffold process creates and updates the following files:

  • Pages/Movies: „Create“, „Delete“, „Details“, „Edit“ und „Index“Pages/Movies: Create, Delete, Details, Edit, and Index.
  • Data/RazorPagesMovieContext.csData/RazorPagesMovieContext.cs

AktualisiertUpdated

  • Startup.csStartup.cs

Die erstellten und aktualisierten Daten werden im nächsten Abschnitt erläutert.The created and updated files are explained in the next section.

Anfängliche MigrationInitial migration

In diesem Abschnitt wird die Paket-Manager-Konsole (Package Manager Console, PMC) für Folgendes verwendet:In this section, the Package Manager Console (PMC) is used to:

  • Fügen Sie eine anfängliche Migration hinzu.Add an initial migration.
  • Aktualisieren Sie die Datenbank mit der anfänglichen Migration.Update the database with the initial migration.

Wählen Sie im Menü Tools NuGet-Paket-Manager > Paket-Manager-Konsole aus.From the Tools menu, select NuGet Package Manager > Package Manager Console.

PMC-Menü

Geben Sie in der PMC die folgenden Befehle ein:In the PMC, enter the following commands:

Add-Migration InitialCreate
Update-Database

Mit den vorherigen Befehlen wird die folgende Warnung erstellt: "No type was specified for the decimal column 'Price' on entity type 'Movie'.The preceding commands generate the following warning: "No type was specified for the decimal column 'Price' on entity type 'Movie'. Dadurch werden Werte automatisch abgeschnitten, falls diese nicht der Standardgenauigkeit und -skalierung entsprechen.This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'." („Für die Spalte „Price“ mit Dezimalwerten beim Entitätstyp „Movie“ wurde kein Typ angegeben. Dadurch werden Werte automatisch abgeschnitten, falls diese nicht der Standardgenauigkeit und -skalierung entsprechen. Geben Sie den Spaltentyp von SQL-Server an, der durch „ForHasColumnType()“ sämtliche Werte unterstützen kann.")Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'."

Ignorieren Sie die Warnung, da sie in einem späteren Schritt behandelt wird.Ignore the warning, as it will be addressed in a later step.

Mit dem Migrationsbefehl wird Code generiert, um das anfängliche Datenbankschema zu erstellen.The migrations command generates code to create the initial database schema. Das Schema basiert auf dem Modell, das in DbContext angegeben ist.The schema is based on the model specified in DbContext. Das Argument InitialCreate wird verwendet, um die Migrationen zu benennen.The InitialCreate argument is used to name the migrations. Es kann jeder Name verwendet werden, aber per Konvention wird ein Name ausgewählt, der die Migration beschreibt.Any name can be used, but by convention a name is selected that describes the migration.

Der update-Befehl führt die Up-Methode in Migrationen aus, die nicht angewendet wurden.The update command runs the Up method in migrations that have not been applied. In diesem Fall führt update die Up-Methode in der Datei Migrations/<time-stamp>_InitialCreate.cs aus, mit der die Datenbank erstellt wird.In this case, update runs the Up method in Migrations/<time-stamp>_InitialCreate.cs file, which creates the database.

Überprüfen des mit Dependency Injection registrierten KontextsExamine the context registered with dependency injection

ASP.NET Core wird mit Dependency Injection erstellt.ASP.NET Core is built with dependency injection. Dienste wie der EF Core-Datenbankkontext werden über Abhängigkeitsinjektion (Dependency Injection) beim Anwendungsstart registriert.Services, such as the EF Core database context context, are registered with dependency injection during application startup. Komponenten, die diese Dienste erfordern (z. B. Razor-Seiten), werden diese Dienste über Konstruktorparameter bereitgestellt.Components that require these services, such as Razor Pages, are provided these services via constructor parameters. Der Konstruktorcode, der eine Datenbankkontext-Instanz abruft, wird später in diesem Tutorial erläutert.The constructor code that gets a database context context instance is shown later in the tutorial.

Das Tool für den Gerüstbau hat automatisch einen Datenbankkontext erstellt und diesen beim Dependency Injection-Container registriert.The scaffolding tool automatically created a database context context and registered it with the dependency injection container.

Untersuchen Sie die Methode Startup.ConfigureServices.Examine the Startup.ConfigureServices method. Die hervorgehobene Zeile wurde vom Gerüst hinzugefügt:The highlighted line was added by the scaffolder:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();

    services.AddDbContext<RazorPagesMovieContext>(options =>
      options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}

Der RazorPagesMovieContext koordiniert die EF Core-Funktionen (Create, Read, Update und Delete) für das Movie-Modell.The RazorPagesMovieContext coordinates EF Core functionality, such as Create, Read, Update and Delete, for the Movie model. Der Datenkontext (RazorPagesMovieContext) wird aus Microsoft.EntityFrameworkCore.DbContext abgeleitet.The data context (RazorPagesMovieContext) is derived from Microsoft.EntityFrameworkCore.DbContext. Der Datenkontext gibt an, welche Entitäten im Datenmodell enthalten sind.The data context specifies which entities are included in the data model.

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; }
    }
}

Der vorangehende Code erstellt eine DbSet<Movie>-Eigenschaft für die Entitätsmenge.The preceding code creates a DbSet<Movie> property for the entity set. In der Terminologie von Entity Framework entspricht eine Entitätenmenge in der Regel einer Datenbanktabelle.In Entity Framework terminology, an entity set typically corresponds to a database table. Entitäten entsprechen Zeilen in Tabellen.An entity corresponds to a row in the table.

Der Name der Verbindungszeichenfolge wird an den Kontext übergeben, indem Sie eine Methode auf einem DbContextOptions-Objekt aufrufen.The name of the connection string is passed in to the context by calling a method on a DbContextOptions object. Für die lokale Entwicklung liest das -Konfigurationssystem die Verbindungszeichenfolge aus der Datei appsettings.json .For local development, the Configuration system reads the connection string from the appsettings.json file.

Testen der AppTest the app

  • Führen Sie die App aus, und fügen Sie /Movies an die URL im Browser an (http://localhost:port/movies).Run the app and append /Movies to the URL in the browser (http://localhost:port/movies).

Wenn Sie eine Fehlermeldung erhalten, müssen Sie Folgendes tun:If you get the error:

SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
Login failed for user 'User-name'.

Sie haben den Migrationsschritt verpasst.You missed the migrations step.

  • Testen Sie den Link Create (Erstellen).Test the Create link.

    Seite „Create“

    Hinweis

    Sie können unter Umständen in das Feld Price keine Kommas als Dezimaltrennzeichen eingeben.You may not be able to enter decimal commas in the Price field. Zur Unterstützung der jQuery-Validierung für Gebietsschemas mit einer anderen Sprache als Englisch, in denen ein Komma („,“) als Dezimaltrennzeichen verwendet wird, und für Datums- und Uhrzeitformate, die nicht dem US-englischen Format entsprechen, muss die App globalisiert werden.To support jQuery validation for non-English locales that use a comma (",") for a decimal point and for non US-English date formats, the app must be globalized. Globalisierungsanweisungen finden Sie unter GitHub-Problem.For globalization instructions, see this GitHub issue.

  • Testen Sie die Links Edit (Bearbeiten), Details und Delete (Löschen).Test the Edit, Details, and Delete links.

Im nächsten Tutorial finden Sie Erläuterungen zu den Dateien, die durch den Gerüstbau erstellt wurden.The next tutorial explains the files created by scaffolding.

Zusätzliche RessourcenAdditional resources

In diesem Abschnitt werden Klassen für die Verwaltung von Filmen in einer plattformübergreifenden SQLite-Datenbank hinzugefügt.In this section, classes are added for managing movies in a cross-platform SQLite database. Apps, die aus einer ASP.NET Core-Vorlage erstellt werden, verwenden eine SQLite-Datenbank.Apps created from an ASP.NET Core template use a SQLite database. Die Modellklassen der App werden mit Entity Framework Core (EF Core) (SQLite-EF Core-Datenbankanbieter) verwendet, um mit der Datenbank zu arbeiten.The app's model classes are used with Entity Framework Core (EF Core) (SQLite EF Core Database Provider) to work with the database. EF Core ist ein ORM-Framework (Objektrelationales Mapping, ORM), das den Datenzugriff vereinfacht.EF Core is an object-relational mapping (ORM) framework that simplifies data access.

Die Modellklassen werden als POCO-Klassen (von „Plain-Old CLR Objects“) bezeichnet, da sie keinerlei Abhängigkeit von EF Core aufweisen.The model classes are known as POCO classes (from "plain-old CLR objects") because they don't have any dependency on EF Core. Sie definieren die Eigenschaften einer Datei, die in der Datenbank gespeichert ist.They define the properties of the data that are stored in the database.

Zeigen Sie Beispielcode an, oder laden Sie diesen herunter (Vorgehensweise zum Herunterladen).View or download sample code (how to download).

Hinzufügen eines DatenmodellsAdd a data model

Klicken Sie mit der rechten Maustaste auf das Projekt RazorPagesMovie und dann auf Hinzufügen > Neuer Ordner.Right-click the RazorPagesMovie project > Add > New Folder. Geben Sie dem Ordner den Namen Modelle.Name the folder Models.

Klicken Sie mit der rechten Maustaste auf den Ordner Modelle.Right-click the Models folder. Wählen Sie Hinzufügen > Klasse aus.Select Add > Class. Nennen Sie die Klasse Movie.Name the class Movie.

Fügen Sie der Klasse Movie die folgenden Eigenschaften hinzu:Add the following properties to the Movie class:

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; }
    }
}

Die Movie-Klasse enthält:The Movie class contains:

  • Die Datenbank benötigt das Feld ID für den primären Schlüssel.The ID field is required by the database for the primary key.

  • [DataType(DataType.Date)]: Das DataType-Attribut gibt den Typ der Daten (Date) an.[DataType(DataType.Date)]: The DataType attribute specifies the type of the data (Date). Mit diesem Attribut:With this attribute:

    • Es ist nicht erforderlich, dass der Benutzer Zeitinformationen in das Datumsfeld eingibt.The user is not required to enter time information in the date field.
    • Nur das Datum wird angezeigt, keine Zeitinformationen.Only the date is displayed, not time information.

DataAnnotations werden in einem späteren Tutorial behandelt.DataAnnotations are covered in a later tutorial.

Erstellen Sie das Projekt, um sicherzustellen, dass keine Kompilierungsfehler vorliegen.Build the project to verify there are no compilation errors.

Erstellen des Gerüsts für das FilmmodellScaffold the movie model

In diesem Abschnitt wird das Gerüst für das Filmmodell erstellt.In this section, the movie model is scaffolded. Mit dem Tool für den Gerüstbau werden Seiten für die Vorgänge „Create“ (Erstellen), „Read“ (Lesen), „Update“ (Aktualisieren) und „Delete“ (Löschen), kurz CRUD-Vorgänge, für das Filmmodell erstellt.That is, the scaffolding tool produces pages for Create, Read, Update, and Delete (CRUD) operations for the movie model.

Erstellen Sie den Ordner Pages/Movies:Create a Pages/Movies folder:

  • Klicken Sie mit der rechten Maustaste auf den Ordner Pages. Klicken Sie dann auf Hinzufügen > Neuer Ordner.Right-click on the Pages folder > Add > New Folder.
  • Nennen Sie den Ordner Movies.Name the folder Movies.

Klicken Sie mit der rechten Maustaste auf den Ordner Pages/Movies. Klicken Sie dann auf Hinzufügen > Neues Gerüstelement.Right-click on the Pages/Movies folder > Add > New Scaffolded Item.

Abbildung der vorherigen Anweisungen.

Klicken Sie im Dialogfeld Gerüst hinzufügen auf Razor-Seiten mithilfe des Entity Frameworks (CRUD) > Hinzufügen.In the Add Scaffold dialog, select Razor Pages using Entity Framework (CRUD) > Add.

Abbildung der vorherigen Anweisungen.

Vervollständigen Sie das Dialogfeld Add Razor Pages using Entity Framework (CRUD) (Razor-Seiten mithilfe des Entity Frameworks (CRUD) hinzufügen):Complete the Add Razor Pages using Entity Framework (CRUD) dialog:

  • Wählen Sie in der Dropdownliste Modellklasse den Eintrag Film (RazorPagesMovie.Models) aus.In the Model class drop down, select Movie (RazorPagesMovie.Models).
  • Klicken Sie in der Zeile Datenkontextklasse auf das Pluszeichen + , und akzeptieren Sie den generierten Namen RazorPagesMovie.Models.RazorPagesMovieContext.In the Data context class row, select the + (plus) sign and accept the generated name RazorPagesMovie.Models.RazorPagesMovieContext.
  • Wählen Sie Hinzufügen aus.Select Add.

Abbildung der vorherigen Anweisungen.

Die Datei appsettings.json wird mit der Verbindungszeichenfolge aktualisiert, die zum Herstellen einer Verbindung mit einer lokalen Datenbank verwendet wird.The appsettings.json file is updated with the connection string used to connect to a local database.

Der Gerüstprozess erstellt und ändert folgende Dateien:The scaffold process creates and updates the following files:

Erstellte DateienFiles created

  • Pages/Movies: „Create“, „Delete“, „Details“, „Edit“ und „Index“Pages/Movies: Create, Delete, Details, Edit, and Index.
  • Data/RazorPagesMovieContext.csData/RazorPagesMovieContext.cs

Datei aktualisiertFile updated

  • Startup.csStartup.cs

Die erstellten und aktualisierten Daten werden im nächsten Abschnitt erläutert.The created and updated files are explained in the next section.

Anfängliche MigrationInitial migration

In diesem Abschnitt wird die Paket-Manager-Konsole (Package Manager Console, PMC) für Folgendes verwendet:In this section, the Package Manager Console (PMC) is used to:

  • Fügen Sie eine anfängliche Migration hinzu.Add an initial migration.
  • Aktualisieren Sie die Datenbank mit der anfänglichen Migration.Update the database with the initial migration.

Wählen Sie im Menü Tools NuGet-Paket-Manager > Paket-Manager-Konsole aus.From the Tools menu, select NuGet Package Manager > Package Manager Console.

PMC-Menü

Geben Sie in der PMC die folgenden Befehle ein:In the PMC, enter the following commands:

Add-Migration Initial
Update-Database

Mit dem Befehl Add-Migration wird Code generiert, um das anfängliche Datenbankschema zu erstellen.The Add-Migration command generates code to create the initial database schema. Das Schema basiert auf dem Modell in DbContext in der Datei RazorPagesMovieContext.cs.The schema is based on the model specified in the DbContext, in the RazorPagesMovieContext.cs file. Das Argument InitialCreate wird verwendet, um die Migration zu benennen.The InitialCreate argument is used to name the migration. Es kann jeder Name verwendet werden, aber per Konvention wird ein Name verwendet, der die Migration beschreibt.Any name can be used, but by convention a name that describes the migration is used. Weitere Informationen finden Sie unter Teil 5 des Tutorials: Anwenden von Migrationen auf das Contoso University-Beispiel.For more information, see Teil 5 des Tutorials: Anwenden von Migrationen auf das Contoso University-Beispiel.

Der Befehl Update-Database führt die Methode Up in der Datei Migrations/<time-stamp>_InitialCreate.cs aus.The Update-Database command runs the Up method in the Migrations/<time-stamp>_InitialCreate.cs file. Die Methode Up erstellt die Datenbank.The Up method creates the database.

Mit den vorherigen Befehlen wird die folgende Warnung erstellt: "No type was specified for the decimal column 'Price' on entity type 'Movie'.The preceding commands generate the following warning: "No type was specified for the decimal column 'Price' on entity type 'Movie'. Dadurch werden Werte automatisch abgeschnitten, falls diese nicht der Standardgenauigkeit und -skalierung entsprechen.This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'." („Für die Spalte „Price“ mit Dezimalwerten beim Entitätstyp „Movie“ wurde kein Typ angegeben. Dadurch werden Werte automatisch abgeschnitten, falls diese nicht der Standardgenauigkeit und -skalierung entsprechen. Geben Sie den Spaltentyp von SQL-Server an, der durch „ForHasColumnType()“ sämtliche Werte unterstützen kann.")Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'."

Ignorieren Sie die Warnung, da sie in einem späteren Schritt behandelt wird.Ignore the warning, as it will be addressed in a later step.

Überprüfen des mit Dependency Injection registrierten KontextsExamine the context registered with dependency injection

ASP.NET Core wird mit Dependency Injection erstellt.ASP.NET Core is built with dependency injection. Dienste wie der EF Core-Datenbankkontext werden über Abhängigkeitsinjektion (Dependency Injection) beim Anwendungsstart registriert.Services (such as the EF Core database context context) are registered with dependency injection during application startup. Komponenten, die diese Dienste erfordern (z. B. Razor Pages), werden von diesen Diensten über Konstruktorparameter bereitgestellt.Components that require these services (such as Razor Pages) are provided these services via constructor parameters. Der Konstruktorcode, der eine Datenbankkontext-Instanz abruft, wird später in diesem Tutorial erläutert.The constructor code that gets a database context contextB context instance is shown later in the tutorial.

Das Tool für den Gerüstbau hat automatisch einen Datenbankkontext erstellt und diesen beim Dependency Injection-Container registriert.The scaffolding tool automatically created a database context context and registered it with the dependency injection container.

Untersuchen Sie die Methode Startup.ConfigureServices.Examine the Startup.ConfigureServices method. Die hervorgehobene Zeile wurde vom Gerüst hinzugefügt:The highlighted line was added by the scaffolder:

// This method gets called by the runtime. 
// Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is 
        // needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

    services.AddDbContext<RazorPagesMovieContext>(options =>
      options.UseSqlServer(
          Configuration.GetConnectionString("RazorPagesMovieContext")));
}

Der RazorPagesMovieContext koordiniert die EF Core-Funktionen (Create, Read, Update und Delete) für das Movie-Modell.The RazorPagesMovieContext coordinates EF Core functionality, such as Create, Read, Update, and Delete, for the Movie model. Der Datenkontext (RazorPagesMovieContext) wird aus Microsoft.EntityFrameworkCore.DbContext abgeleitet.The data context (RazorPagesMovieContext) is derived from Microsoft.EntityFrameworkCore.DbContext. Der Datenkontext gibt an, welche Entitäten im Datenmodell enthalten sind.The data context specifies which entities are included in the data model.

using Microsoft.EntityFrameworkCore;

namespace RazorPagesMovie.Models
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
    }
}

Der vorangehende Code erstellt eine DbSet<Movie>-Eigenschaft für die Entitätsmenge.The preceding code creates a DbSet<Movie> property for the entity set. In der Terminologie von Entity Framework entspricht eine Entitätenmenge in der Regel einer Datenbanktabelle.In Entity Framework terminology, an entity set typically corresponds to a database table. Entitäten entsprechen Zeilen in Tabellen.An entity corresponds to a row in the table.

Der Name der Verbindungszeichenfolge wird an den Kontext übergeben, indem Sie eine Methode auf einem DbContextOptions-Objekt aufrufen.The name of the connection string is passed in to the context by calling a method on a DbContextOptions object. Für die lokale Entwicklung liest das -Konfigurationssystem die Verbindungszeichenfolge aus der Datei appsettings.json .For local development, the Configuration system reads the connection string from the appsettings.json file.

Testen der AppTest the app

  • Führen Sie die App aus, und fügen Sie /Movies an die URL im Browser an (http://localhost:port/movies).Run the app and append /Movies to the URL in the browser (http://localhost:port/movies).

Wenn Sie eine Fehlermeldung erhalten, müssen Sie Folgendes tun:If you get the error:

SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
Login failed for user 'User-name'.

Sie haben den Migrationsschritt verpasst.You missed the migrations step.

  • Testen Sie den Link Create (Erstellen).Test the Create link.

    Seite „Create“

    Hinweis

    Sie können unter Umständen in das Feld Price keine Kommas als Dezimaltrennzeichen eingeben.You may not be able to enter decimal commas in the Price field. Zur Unterstützung der jQuery-Validierung für Gebietsschemas mit einer anderen Sprache als Englisch, in denen ein Komma („,“) als Dezimaltrennzeichen verwendet wird, und für Datums- und Uhrzeitformate, die nicht dem US-englischen Format entsprechen, muss die App globalisiert werden.To support jQuery validation for non-English locales that use a comma (",") for a decimal point and for non US-English date formats, the app must be globalized. Globalisierungsanweisungen finden Sie unter GitHub-Problem.For globalization instructions, see this GitHub issue.

  • Testen Sie die Links Edit (Bearbeiten), Details und Delete (Löschen).Test the Edit, Details, and Delete links.

Im nächsten Tutorial finden Sie Erläuterungen zu den Dateien, die durch den Gerüstbau erstellt wurden.The next tutorial explains the files created by scaffolding.

Zusätzliche RessourcenAdditional resources