Referenz zu Entity Framework Core Tools - .NET CLIEntity Framework Core tools reference - .NET CLI

Die Befehlszeilenschnittstelle (CLI)-Tools für Entity Framework Core führen Sie während der Entwurfszeit-Entwicklungsaufgaben.The command-line interface (CLI) tools for Entity Framework Core perform design-time development tasks. Angenommen, sie erstellen Migrationen, Anwenden von Migrationen und Code für ein Modell basierend auf einer vorhandenen Datenbank generieren.For example, they create migrations, apply migrations, and generate code for a model based on an existing database. Die Befehle sind eine Erweiterung für die plattformübergreifende Dotnet Befehl, der Teil von der .NET Core SDK.The commands are an extension to the cross-platform dotnet command, which is part of the .NET Core SDK. Diese Tools funktionieren mit .NET Core-Projekten.These tools work with .NET Core projects.

Wenn Sie Visual Studio verwenden, empfehlen wir die -Paket-Manager-Konsole Tools stattdessen:If you're using Visual Studio, we recommend the Package Manager Console tools instead:

  • Sie automatisch mit dem aktuellen Projekt, das in ausgewählten funktionieren die -Paket-Manager-Konsole ohne, dass Sie manuell zwischen Verzeichnissen zu wechseln.They automatically work with the current project selected in the Package Manager Console without requiring that you manually switch directories.
  • Öffnen Sie automatisch Dateien, die von einem Befehl generiert wird, nachdem der Befehl abgeschlossen ist.They automatically open files generated by a command after the command is completed.

Installieren der ToolsInstalling the tools

Der Installationsvorgang zu starten, hängt von Projekttyp und der Version ab:The installation procedure depends on project type and version:

  • ASP.NET Core Version 2.1 und höherASP.NET Core version 2.1 and later
  • EF Core 2.xEF Core 2.x
  • EF Core 1.xEF Core 1.x

ASP.NET Core 2.1 +ASP.NET Core 2.1+

  • Installieren Sie die aktuelle .NET Core SDK.Install the current .NET Core SDK. Das SDK muss installiert werden, auch wenn Sie über die neueste Version von Visual Studio 2017 verfügen.The SDK has to be installed even if you have the latest version of Visual Studio 2017.

    Dies ist alles, was für ASP.NET Core 2.1 + erforderlich ist, da die Microsoft.EntityFrameworkCore.Design Paket befindet sich auf die Microsoft.AspNetCore.App metapaket.This is all that is needed for ASP.NET Core 2.1+ because the Microsoft.EntityFrameworkCore.Design package is included in the Microsoft.AspNetCore.App metapackage.

EF Core 2.x (nicht in ASP.NET Core)EF Core 2.x (not ASP.NET Core)

Die dotnet ef Befehle sind in .NET Core SDK enthalten, aber so aktivieren Sie die Befehle müssen Sie installieren die Microsoft.EntityFrameworkCore.Design Paket.The dotnet ef commands are included in the .NET Core SDK, but to enable the commands you have to install the Microsoft.EntityFrameworkCore.Design package.

  • Installieren Sie die aktuelle .NET Core SDK.Install the current .NET Core SDK. Das SDK muss installiert werden, auch wenn Sie über die neueste Version von Visual Studio 2017 verfügen.The SDK has to be installed even if you have the latest version of Visual Studio 2017.

  • Installieren Sie die neueste stabile Microsoft.EntityFrameworkCore.Design Paket.Install the latest stable Microsoft.EntityFrameworkCore.Design package.

    dotnet add package Microsoft.EntityFrameworkCore.Design
    

EF Core 1.xEF Core 1.x

  • Installieren Sie .NET Core SDK, Version 2.1.200.Install the .NET Core SDK version 2.1.200. Höhere Versionen sind nicht kompatibel mit CLI-Tools für EF Core 1.0 und 1.1.Later versions are not compatible with CLI tools for EF Core 1.0 and 1.1.

  • Konfigurieren Sie die Anwendung auf Version des SDKS verwenden die 2.1.200 durch Ändern der "Global.JSON" Datei.Configure the application to use the 2.1.200 SDK version by modifying its global.json file. Diese Datei befindet sich normalerweise in dem Projektmappenverzeichnis (eine über das Projekt).This file is normally included in the solution directory (one above the project).

  • Bearbeiten die Projektdatei und fügen Microsoft.EntityFrameworkCore.Tools.DotNet als eine DotNetCliToolReference Element.Edit the project file and add Microsoft.EntityFrameworkCore.Tools.DotNet as a DotNetCliToolReference item. Geben Sie die neueste Version der 1.x, z. B.: 1.1.6.Specify the latest 1.x version, for example: 1.1.6. Finden Sie in der Beispielprojektdatei wird am Ende dieses Abschnitts.See the project file example at the end of this section.

  • Installieren Sie die neueste Version 1.x der der Microsoft.EntityFrameworkCore.Design Verpacken, z.B.:Install the latest 1.x version of the Microsoft.EntityFrameworkCore.Design package, for example:

    dotnet add package Microsoft.EntityFrameworkCore.Design -v 1.1.6
    

    Mit beiden Paketverweise hinzugefügt wird sieht die Projektdatei etwa folgendermaßen aus:With both package references added, the project file looks something like this:

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp1.1</TargetFramework>
      </PropertyGroup>
      <ItemGroup>
        <PackageReference Include="Microsoft.EntityFrameworkCore.Design"
                          Version="1.1.6"
                           PrivateAssets="All" />
      </ItemGroup>
      <ItemGroup>
         <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet"
                                Version="1.1.6" />
      </ItemGroup>
    </Project>
    

    Einen Paketverweis mit PrivateAssets="All" ist nicht verfügbar gemacht werden, für Projekte, die dieses Projekt verweisen.A package reference with PrivateAssets="All" isn't exposed to projects that reference this project. Diese Einschränkung ist besonders nützlich für Pakete, die in der Regel nur während der Entwicklung verwendet werden.This restriction is especially useful for packages that are typically only used during development.

Überprüfen der installationVerify installation

Führen Sie die folgenden Befehle aus, um sicherzustellen, dass EF Core-CLI-Tools ordnungsgemäß installiert sind:Run the following commands to verify that EF Core CLI tools are correctly installed:

dotnet restore
dotnet ef

Die Ausgabe des Befehls identifiziert die Version der Tools verwendet:The output from the command identifies the version of the tools in use:


                     _/\__
               ---==/    \\
         ___  ___   |.    \|\
        | __|| __|  |  )   \\\
        | _| | _|   \_/ |  //|\\
        |___||_|       /   \\\/\\

Entity Framework Core .NET Command-line Tools 2.1.3-rtm-32065

<Usage documentation follows, not shown.>

Mithilfe der ToolsUsing the tools

Bevor Sie mit den Tools müssen Sie möglicherweise ein Startprojekt erstellen, oder legen Sie die Umgebung.Before using the tools, you might have to create a startup project or set the environment.

Zielprojekt und Startup-ProjektTarget project and startup project

Die Befehle finden Sie in einem Projekt und ein Startprojekt.The commands refer to a project and a startup project.

  • Die Projekt ist auch bekannt als die Zielprojekt da es sich handelt, in dem Sie die Befehle zum Hinzufügen oder Entfernen von Dateien.The project is also known as the target project because it's where the commands add or remove files. Standardmäßig ist das Projekt im aktuellen Verzeichnis das Zielprojekt.By default, the project in the current directory is the target project. Sie können ein anderes Projekt als Zielprojekt angeben, mit der --project Option.You can specify a different project as target project by using the --project option.

  • Die Startprojekt ist diejenige, die die Tools erstellen und ausführen.The startup project is the one that the tools build and run. Die Tools werden zum Ausführen der Anwendungscode zur Entwurfszeit zum Abrufen von Informationen über das Projekt, z. B. die Datenbank-Verbindungszeichenfolge und die Konfiguration des Modells.The tools have to execute application code at design time to get information about the project, such as the database connection string and the configuration of the model. Standardmäßig ist das Projekt im aktuellen Verzeichnis das Startprojekt an.By default, the project in the current directory is the startup project. Sie können ein anderes Projekt als Startprojekt angeben, mit der --startup-project Option.You can specify a different project as startup project by using the --startup-project option.

Das Startprojekt und ein Zielprojekt sind häufig die gleichen Projekt.The startup project and target project are often the same project. Ein typisches Szenario, in dem sie separate Projekte sind, ist:A typical scenario where they are separate projects is when:

  • Die EF Core-Kontext und Entitätsklassen-Klassen sind in einer .NET Core-Klassenbibliothek.The EF Core context and entity classes are in a .NET Core class library.
  • Ein .NET Core-Konsolen-app oder Web-app verweist auf die Klassenbibliothek.A .NET Core console app or web app references the class library.

Es ist auch möglich, platzieren migrationscode in eine Klassenbibliothek, die getrennt von den Entity Framework Core-Kontext.It's also possible to put migrations code in a class library separate from the EF Core context.

Andere ZielframeworksOther target frameworks

Die CLI-Tools funktionieren mit .NET Core-Projekten und .NET Framework-Projekten.The CLI tools work with .NET Core projects and .NET Framework projects. Apps, die EF Core-Modell in einer .NET Standard-Klassenbibliothek verfügen, möglicherweise keiner .NET Core- oder .NET Framework-Projekt.Apps that have the EF Core model in a .NET Standard class library might not have a .NET Core or .NET Framework project. Dies ist z. B. "true" mit Xamarin und die universelle Windows-Plattform-apps.For example, this is true of Xamarin and Universal Windows Platform apps. In solchen Fällen können Sie ein Konsolenanwendungsprojekt für .NET Core erstellen, dessen einziger Zweck ist es, als Startprojekt für die Tools zu fungieren.In such cases, you can create a .NET Core console app project whose only purpose is to act as startup project for the tools. Das Projekt kann ein dummyprojekt ohne realen Code sein — ist nur erforderlich, ein Ziel für die Tools bereitzustellen.The project can be a dummy project with no real code — it is only needed to provide a target for the tooling.

Warum ist ein dummyprojekt erforderlich?Why is a dummy project required? Wie bereits erwähnt, haben die Tools zum Ausführen der Anwendungscode zur Entwurfszeit an.As mentioned earlier, the tools have to execute application code at design time. Zu diesem Zweck müssen sie die .NET Core-Runtime zu verwenden.To do that, they need to use the .NET Core runtime. Wenn die EF Core-Modell in einem Projekt, die auf .NET Core oder .NET Framework abzielt ist, nutzen die EF Core-Tools die Laufzeit aus dem Projekt.When the EF Core model is in a project that targets .NET Core or .NET Framework, the EF Core tools borrow the runtime from the project. Sie können nicht dies tun, wenn das EF Core-Modell in einer .NET Standard-Klassenbibliothek ist.They can't do that if the EF Core model is in a .NET Standard class library. .NET Standard ist keine tatsächliche Implementierung von .NET. Es ist eine Spezifikation eines Satzes von APIs, die .NET-Implementierungen unterstützt wird müssen.The .NET Standard is not an actual .NET implementation; it's a specification of a set of APIs that .NET implementations must support. Aus diesem Grund ist .NET Standard nicht ausreichend für die EF Core-Tools, um Anwendungscode auszuführen.Therefore .NET Standard is not sufficient for the EF Core tools to execute application code. Dem dummyprojekt, die Sie erstellen, für die Verwendung als Startup-Projekt enthält eine konkrete Zielplattform, die in der die Tools die .NET Standard-Klassenbibliothek laden können.The dummy project you create to use as startup project provides a concrete target platform into which the tools can load the .NET Standard class library.

ASP.NET Core-UmgebungASP.NET Core environment

Legen Sie zum Angeben der Umgebung für ASP.NET Core-Projekten die "aspnetcore_environment" Umgebungsvariablen vor dem Ausführen der Befehle.To specify the environment for ASP.NET Core projects, set the ASPNETCORE_ENVIRONMENT environment variable before running commands.

Allgemeine OptionenCommon options

OptionOption BeschreibungDescription
--json Zeigen Sie die JSON-Ausgabe.Show JSON output.
-c --context <DBCONTEXT> Die DbContext zu verwendende Klasse an.The DbContext class to use. Name der Klasse nur oder mit Namespaces vollqualifiziert.Class name only or fully qualified with namespaces. Wenn diese Option ausgelassen wird, findet das EF Core die Context-Klasse.If this option is omitted, EF Core will find the context class. Diese Option ist erforderlich, wenn es mehrere Kontextklassen sind.If there are multiple context classes, this option is required.
-p --project <PROJECT> Relativer Pfad in den Projektordner des Zielprojekts.Relative path to the project folder of the target project. Standardwert ist der aktuelle Ordner an.Default value is the current folder.
-s --startup-project <PROJECT> Relativer Pfad in den Projektordner für das Startprojekt.Relative path to the project folder of the startup project. Standardwert ist der aktuelle Ordner an.Default value is the current folder.
--framework <FRAMEWORK> Die Zielframework-Moniker für die Zielframework.The Target Framework Moniker for the target framework. Wird verwendet, wenn die Projektdatei mehrere Zielframeworks gibt, und Sie eine dieser Optionen auswählen möchten.Use when the project file specifies multiple target frameworks, and you want to select one of them.
--configuration <CONFIGURATION> Die Build-Konfiguration, z. B.: Debug oder Release.The build configuration, for example: Debug or Release.
--runtime <IDENTIFIER> Der Bezeichner der Ziellaufzeit zum Wiederherstellen von Paketen für.The identifier of the target runtime to restore packages for. Eine Liste der Runtime-IDs (RIDs) finden Sie unter RID-Katalog.For a list of Runtime Identifiers (RIDs), see the RID catalog.
-h --help Anzeigen von Hilfeinformationen.Show help information.
-v --verbose Zeigen Sie ausführlichen Ausgabe.Show verbose output.
--no-color Nicht farbig anzuzeigende Ausgabe aus.Don't colorize output.
--prefix-output Das Präfix auf Ausgabe.Prefix output with level.

dotnet ef database dropdotnet ef database drop

Löscht die Datenbank.Drops the database.

Optionen:Options:

OptionOption BeschreibungDescription
-f --force Bestätigen Sie nicht.Don't confirm.
--dry-run Anzeigen der Datenbank gelöscht werden würde, dies jedoch noch nicht.Show which database would be dropped, but don't drop it.

dotnet ef database updatedotnet ef database update

Aktualisiert die Datenbank aus, um die letzte Migration oder für eine angegebene Migration.Updates the database to the last migration or to a specified migration.

Argumente:Arguments:

ArgumentArgument BeschreibungDescription
<MIGRATION> Die Ziel-Migration.The target migration. Migrationen können nach Name oder ID identifiziert werdenMigrations may be identified by name or by ID. Die Zahl 0 ist ein Sonderfall, das bedeutet, dass vor der ersten Migration und bewirkt, dass alle Migrationen zu rückgängig gemacht werden.The number 0 is a special case that means before the first migration and causes all migrations to be reverted. Wenn keine Migration angegeben ist, verwendet der Befehl auf die letzte Migration.If no migration is specified, the command defaults to the last migration.

In den folgenden Beispielen wird die Datenbank für eine angegebene Migration aktualisieren.The following examples update the database to a specified migration. Das erste verwendet den Migrationsnamen aus, und die zweite verwendet den Migrations-ID:The first uses the migration name and the second uses the migration ID:

dotnet ef database update InitialCreate
dotnet ef database update 20180904195021_InitialCreate

dotnet ef dbcontext infodotnet ef dbcontext info

Ruft Informationen über eine DbContext Typ.Gets information about a DbContext type.

dotnet ef dbcontext listdotnet ef dbcontext list

Listet verfügbare DbContext Typen.Lists available DbContext types.

dotnet ef dbcontext scaffolddotnet ef dbcontext scaffold

Generiert Code für eine DbContext und Entitätstypen für eine Datenbank.Generates code for a DbContext and entity types for a database. Damit für diesen Befehl zum Generieren eines Entitätstyps muss in der Datenbanktabelle einen Primärschlüssel verfügen.In order for this command to generate an entity type, the database table must have a primary key.

Argumente:Arguments:

ArgumentArgument BeschreibungDescription
<CONNECTION> Die Verbindungszeichenfolge in der Datenbank.The connection string to the database. Der Wert kann für ASP.NET Core 2.x-Projekte sein Name =<Name der Verbindungszeichenfolge >.For ASP.NET Core 2.x projects, the value can be name=<name of connection string>. In diesem Fall stammt der Name der Konfigurationsquellen, die für das Projekt eingerichtet sind.In that case the name comes from the configuration sources that are set up for the project.
<PROVIDER> Die zu verwendende Anbieter.The provider to use. Normalerweise hat der Name des NuGet-Pakets, z. B.: Microsoft.EntityFrameworkCore.SqlServer.Typically this is the name of the NuGet package, for example: Microsoft.EntityFrameworkCore.SqlServer.

Optionen:Options:

OptionOption BeschreibungDescription
-d-d --data-annotations Verwenden Sie Attribute, um das Modell (sofern möglich) zu konfigurieren.Use attributes to configure the model (where possible). Wenn diese Option ausgelassen wird, wird nur die fluent-API verwendet.If this option is omitted, only the fluent API is used.
-c --context <NAME> Der Name des der DbContext Klasse generiert.The name of the DbContext class to generate.
--context-dir <PATH> Verzeichnis zum Ablegen der DbContext Klassendatei in.The directory to put the DbContext class file in. Pfade sind relativ zum Projektverzeichnis.Paths are relative to the project directory. Namespaces werden von den Ordnernamen abgeleitet.Namespaces are derived from the folder names.
-f --force Überschreiben Sie vorhandene Dateien.Overwrite existing files.
-o --output-dir <PATH> Das Verzeichnis einzufügenden Entität Klassendateien.The directory to put entity class files in. Pfade sind relativ zum Projektverzeichnis.Paths are relative to the project directory.
--schema <SCHEMA_NAME>... Die Schemas der Tabellen zur Generierung von Entitätstypen für.The schemas of tables to generate entity types for. Um mehrere Schemas anzugeben, wiederholen Sie die --schema jeweils.To specify multiple schemas, repeat --schema for each one. Wenn diese Option ausgelassen wird, sind alle Schemas enthalten.If this option is omitted, all schemas are included.
-t --table <TABLE_NAME>...--table <TABLE_NAME>... Die Tabellen zur Generierung von Entitätstypen für werden soll.The tables to generate entity types for. Um mehrere Tabellen anzugeben, wiederholen Sie die -t oder --table jeweils.To specify multiple tables, repeat -t or --table for each one. Wenn diese Option ausgelassen wird, sind alle Tabellen enthalten.If this option is omitted, all tables are included.
--use-database-names Verwenden Sie Tabellen- und Spaltennamen, genau wie in der Datenbank.Use table and column names exactly as they appear in the database. Wenn diese Option ausgelassen wird, werden die Datenbanknamen geändert, um genauer zu Konventionen für C#-Namen entsprechen.If this option is omitted, database names are changed to more closely conform to C# name style conventions.

Das folgende Beispiel erstellt das Gerüst für alle Schemas und Tabellen und fügt die neuen Dateien in die Modelle Ordner.The following example scaffolds all schemas and tables and puts the new files in the Models folder.

dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models

Das folgende Beispiel erstellt das Gerüst für nur ausgewählte Tabellen und den Kontext in einem separaten Ordner mit dem angegebenen Namen erstellt:The following example scaffolds only selected tables and creates the context in a separate folder with a specified name:

dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models -t Blog -t Post --context-dir Context -c BlogContext

dotnet ef migrations adddotnet ef migrations add

Fügt eine neue Migration hinzu.Adds a new migration.

Argumente:Arguments:

ArgumentArgument BeschreibungDescription
<NAME> Der Name der Migration.The name of the migration.

Optionen:Options:

OptionOption BeschreibungDescription
-o --output-dir <PATH> Das Verzeichnis (und Sub-Namespace) verwenden.The directory (and sub-namespace) to use. Pfade sind relativ zum Projektverzeichnis.Paths are relative to the project directory. Der Standardwert ist "Migrations".Defaults to "Migrations".

dotnet ef migrations listdotnet ef migrations list

Listet die verfügbaren Migrationen.Lists available migrations.

dotnet ef migrations removedotnet ef migrations remove

Entfernt die letzte Migration (Rollback die codeänderungen, die für die Migration durchgeführt wurden).Removes the last migration (rolls back the code changes that were done for the migration).

Optionen:Options:

OptionOption BeschreibungDescription
-f --force Zurücksetzen die Migration (ein Rollback die Änderungen, die auf die Datenbank angewendet wurden).Revert the migration (roll back the changes that were applied to the database).

dotnet ef migrations scriptdotnet ef migrations script

Generiert ein SQL-Skript von Migrationen.Generates a SQL script from migrations.

Argumente:Arguments:

ArgumentArgument BeschreibungDescription
<FROM> Die Migration der ab.The starting migration. Migrationen können nach Name oder ID identifiziert werdenMigrations may be identified by name or by ID. Die Zahl 0 ist ein Sonderfall, das bedeutet, dass vor der ersten Migration.The number 0 is a special case that means before the first migration. Der Standardwert ist 0.Defaults to 0.
<TO> Der Endpunkt-Migration.The ending migration. Ist standardmäßig auf die letzte Migration ein.Defaults to the last migration.

Optionen:Options:

OptionOption BeschreibungDescription
-o --output <FILE> Die Datei, die das Skript zu schreiben.The file to write the script to.
-i --idempotent Generieren Sie ein Skript, das für eine Datenbank auf eine Migration verwendet werden kann.Generate a script that can be used on a database at any migration.

Das folgende Beispiel erstellt ein Skript für die Migration InitialCreate:The following example creates a script for the InitialCreate migration:

dotnet ef migrations script 0 InitialCreate

Das folgende Beispiel erstellt ein Skript für alle Migrationen nach der Migration InitialCreate.The following example creates a script for all migrations after the InitialCreate migration.

dotnet ef migrations script 20180904195021_InitialCreate