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

Die CLI-Tools (Command-Line Interface, Befehlszeilenschnittstelle) für Entity Framework Core die Entwicklungsaufgaben zur Entwurfszeit ausführen.The command-line interface (CLI) tools for Entity Framework Core perform design-time development tasks. Beispielsweise erstellen Sie Migrationen, wenden Migrationen an und generieren Code für ein Modell, das auf einer vorhandenen Datenbank basiert.For example, they create migrations, apply migrations, and generate code for a model based on an existing database. Die Befehle sind eine Erweiterung des plattformübergreifenden dotnet -Befehls, der Teil der .net Core SDKist.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 stattdessen die Tools der Paket-Manager-Konsole :If you're using Visual Studio, we recommend the Package Manager Console tools instead:

  • Sie arbeiten automatisch mit dem aktuellen Projekt, das in der Paket-Manager-Konsole ausgewählt ist, ohne dass Sie manuell Verzeichnisse wechseln müssten.They automatically work with the current project selected in the Package Manager Console without requiring that you manually switch directories.
  • Dateien, die von einem Befehl generiert werden, werden automatisch geöffnet, nachdem der Befehl abgeschlossen wurde.They automatically open files generated by a command after the command is completed.

Installieren der ToolsInstalling the tools

Das Installationsverfahren hängt vom Projekttyp und der Version ab:The installation procedure depends on project type and version:

  • EF Core 3. xEF Core 3.x
  • 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

EF Core 3. xEF Core 3.x

  • dotnet ef müssen als globales oder lokales Tool installiert werden.dotnet ef must be installed as a global or local tool. Die meisten Entwickler installieren dotnet ef als globales Tool mit dem folgenden Befehl:Most developers will install dotnet ef as a global tool with the following command:

    dotnet tool install --global dotnet-ef
    

    Sie können auch dotnet ef als lokales Tool verwenden.You can also use dotnet ef as local tool. Um es als lokales Tool zu verwenden, stellen Sie die Abhängigkeiten eines Projekts wieder her, das es mithilfe einer Tool Manifest-Datei als ToolAbhängigkeit deklariert.To use it as a local tool, restore the dependencies of a project that declares it as a tooling dependency using a tool manifest file.

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

  • Installieren Sie das neueste Microsoft.EntityFrameworkCore.Design Paket.Install the latest Microsoft.EntityFrameworkCore.Design package.

    dotnet add package Microsoft.EntityFrameworkCore.Design
    

ASP.net Core 2.1 und höherASP.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 und höher erforderlich ist, da das Microsoft.EntityFrameworkCore.Design-Paket im Microsoft. aspnetcore. app-Metapaketenthalten ist.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 ASP.net Core)EF Core 2.x (not ASP.NET Core)

Die dotnet ef Befehle sind in der .net Core SDK enthalten, um jedoch die Befehle zu aktivieren, die Sie zum Installieren des Microsoft.EntityFrameworkCore.Design Pakets haben.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 verfügen.The SDK has to be installed even if you have the latest version of Visual Studio.

  • Installieren Sie das 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 die .net Core SDK Version 2.1.200.Install the .NET Core SDK version 2.1.200. Spätere Versionen sind nicht mit den CLI-Tools für EF Core 1,0 und 1,1 kompatibel.Later versions are not compatible with CLI tools for EF Core 1.0 and 1.1.

  • Konfigurieren Sie die Anwendung für die Verwendung der 2.1.200 SDK-Version, indem Sie Ihre Global. JSON -Datei ändern.Configure the application to use the 2.1.200 SDK version by modifying its global.json file. Diese Datei ist normalerweise im Projektmappenverzeichnis enthalten (eines oberhalb des Projekts).This file is normally included in the solution directory (one above the project).

  • Bearbeiten Sie die Projektdatei, und fügen Sie Microsoft.EntityFrameworkCore.Tools.DotNet als DotNetCliToolReference Element hinzu.Edit the project file and add Microsoft.EntityFrameworkCore.Tools.DotNet as a DotNetCliToolReference item. Geben Sie die neueste Version von 1. x an, z. b.: 1.1.6.Specify the latest 1.x version, for example: 1.1.6. Weitere Informationen finden Sie im Beispiel für eine Projektdatei am Ende dieses Abschnitts.See the project file example at the end of this section.

  • Installieren Sie die neueste Version von 1. x des Microsoft.EntityFrameworkCore.Design Pakets, 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
    

    Wenn beide Paket Verweise hinzugefügt wurden, sieht die Projektdatei in etwa wie folgt 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>
    

    Ein Paket Verweis mit PrivateAssets="All" wird nicht für Projekte verfügbar gemacht, die auf 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 sindRun 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 verwendeten Tools: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.>

Verwenden der ToolsUsing the tools

Vor der Verwendung der Tools müssen Sie möglicherweise ein Startprojekt erstellen oder die Umgebung festlegen.Before using the tools, you might have to create a startup project or set the environment.

Ziel Projekt und StartprojektTarget project and startup project

Die Befehle verweisen auf ein Projekt und ein Startprojekt.The commands refer to a project and a startup project.

  • Das Projekt wird auch als Ziel Projekt bezeichnet, weil die Befehle Dateien hinzufügen oder entfernen.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 Ziel Projekt.By default, the project in the current directory is the target project. Sie können ein anderes Projekt als Ziel Projekt angeben, indem Sie die Option --project verwenden.You can specify a different project as target project by using the --project option.

  • Das Startprojekt ist das Startprojekt , das von den Tools erstellt und ausgeführt wird.The startup project is the one that the tools build and run. Die Tools müssen Anwendungscode zur Entwurfszeit ausführen, um Informationen zum Projekt zu erhalten, z. b. die Daten bankverbindungs Zeichenfolge 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.By default, the project in the current directory is the startup project. Sie können ein anderes Projekt als Startprojekt angeben, indem Sie die Option --startup-project verwenden.You can specify a different project as startup project by using the --startup-project option.

Das Startprojekt und das Ziel Projekt sind häufig das gleiche Projekt.The startup project and target project are often the same project. Ein typisches Szenario, bei dem es sich um separate Projekte handelt, sind folgende:A typical scenario where they are separate projects is when:

  • Die EF Core Kontext-und Entitäts Klassen befinden sich in einer .net Core-Klassenbibliothek.The EF Core context and entity classes are in a .NET Core class library.
  • Eine .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, Migrations Code in einer Klassenbibliothek zu platzieren, getrennt vom EF Core Kontext.It's also possible to put migrations code in a class library separate from the EF Core context.

Andere Ziel-FrameworksOther 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 über das EF Core Modell in einer .NET Standard-Klassenbibliothek verfügen, verfügen möglicherweise nicht über ein .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 gilt z. b. für xamarin-und universelle Windows-Plattform-apps.For example, this is true of Xamarin and Universal Windows Platform apps. In solchen Fällen können Sie ein .net Core-Konsolen-App-Projekt erstellen, dessen einziger Zweck darin besteht, 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 echten Code sein — es ist nur erforderlich, um 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, müssen die Tools Anwendungscode zur Entwurfszeit ausführen.As mentioned earlier, the tools have to execute application code at design time. Hierzu müssen Sie die .net Core-Laufzeit verwenden.To do that, they need to use the .NET Core runtime. Wenn sich das EF Core Modell in einem Projekt befindet, das .net Core oder .NET Framework als Ziel hat, wird die Laufzeit von den EF Core Tools aus dem Projekt ausgeliehen.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. Dies ist nicht möglich, wenn sich das EF Core Modell in einer .NET Standard Klassenbibliothek befindet.They can't do that if the EF Core model is in a .NET Standard class library. Der .NET Standard ist keine tatsächliche .NET-Implementierung. Es handelt sich um eine Spezifikation für eine Reihe von APIs, die von .net-Implementierungen unterstützt werden 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. Daher ist .NET Standard für die EF Core Tools nicht ausreichend, um Anwendungscode auszuführen.Therefore .NET Standard is not sufficient for the EF Core tools to execute application code. Das Dummyprojekt, das Sie als Startprojekt verwenden, stellt eine konkrete Zielplattform bereit, in die 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

Um die Umgebung für ASP.net Core Projekte anzugeben, legen Sie die ASPNETCORE_ENVIRONMENT -Umgebungsvariable vor dem Ausführen von Befehlen fest.To specify the environment for ASP.NET Core projects, set the ASPNETCORE_ENVIRONMENT environment variable before running commands.

Allgemeine OptionenCommon options

OptionOption BeschreibungDescription
--json JSON-Ausgabe anzeigen.Show JSON output.
-c --context <DBCONTEXT> Die DbContext-Klasse, die verwendet werden soll.The DbContext class to use. Der Klassenname oder voll qualifiziert mit Namespaces.Class name only or fully qualified with namespaces. Wenn diese Option weggelassen wird, wird EF Core die Kontext Klasse finden.If this option is omitted, EF Core will find the context class. Wenn mehrere Kontext Klassen vorhanden sind, ist diese Option erforderlich.If there are multiple context classes, this option is required.
-p --project <PROJECT> Relativer Pfad zum Projektordner des Ziel Projekts.Relative path to the project folder of the target project. Der Standardwert ist der aktuelle Ordner.Default value is the current folder.
-s --startup-project <PROJECT> Relativer Pfad zum Projektordner des Start Projekts.Relative path to the project folder of the startup project. Der Standardwert ist der aktuelle Ordner.Default value is the current folder.
--framework <FRAMEWORK> Der zielframeworkmoniker für das Ziel Framework.The Target Framework Moniker for the target framework. Verwenden Sie, wenn die Projektdatei mehrere Ziel-Frameworks angibt, und wählen Sie eine davon aus.Use when the project file specifies multiple target frameworks, and you want to select one of them.
--configuration <CONFIGURATION> Die Buildkonfiguration, z. b. Debug oder Release.The build configuration, for example: Debug or Release.
--runtime <IDENTIFIER> Der Bezeichner der Ziel Laufzeit, für die Pakete wieder hergestellt werden sollen.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 Hilfe Informationen.Show help information.
-v --verbose Zeigt eine ausführliche Ausgabe an.Show verbose output.
--no-color Ausgabe nicht einfärben.Don't colorize output.
--prefix-output Präfix Ausgabe mit Ebene.Prefix output with level.

DotNet EF-Datenbank löschendotnet ef database drop

Löscht die Datenbank.Drops the database.

Optionen:Options:

OptionOption BeschreibungDescription
-f --force Nicht bestätigen.Don't confirm.
--dry-run Zeigen Sie an, welche Datenbank gelöscht werden soll, aber löschen Sie Sie nicht.Show which database would be dropped, but don't drop it.

DotNet EF-Datenbankupdatedotnet ef database update

Aktualisiert die Datenbank auf die letzte Migration oder 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 anhand des Namens oder der ID identifiziert werden.Migrations may be identified by name or by ID. Die Zahl 0 (null) ist ein Sonderfall, der vor der ersten Migration steht und bewirkt, dass alle Migrationen 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, wird für den Befehl standardmäßig die letzte Migration verwendet.If no migration is specified, the command defaults to the last migration.

In den folgenden Beispielen wird die-Datenbank auf eine angegebene Migration aktualisiert.The following examples update the database to a specified migration. Der erste verwendet den Migrations Namen, der zweite verwendet die 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-Informationendotnet ef dbcontext info

Ruft Informationen zu einem DbContext Typs ab.Gets information about a DbContext type.

DotNet EF-dbcontext-Listedotnet ef dbcontext list

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

DotNet EF-dbcontext-Gerüstdotnet ef dbcontext scaffold

Generiert Code für eine DbContext und Entitäts Typen für eine Datenbank.Generates code for a DbContext and entity types for a database. Damit dieser Befehl einen Entitätstyp generieren kann, muss die Datenbanktabelle über 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 Verbindungs Zeichenfolge für die Datenbank.The connection string to the database. Bei ASP.net Core 2. x-Projekten kann der Wert Name =<Name der Verbindungs Zeichenfolge > sein.For ASP.NET Core 2.x projects, the value can be name=<name of connection string>. In diesem Fall stammt der Name aus den Konfigurations Quellen, 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> Der zu verwendende Anbieter.The provider to use. In der Regel ist dies 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 zu konfigurieren (sofern möglich).Use attributes to configure the model (where possible). Wenn diese Option weggelassen wird, wird nur die fließende API verwendet.If this option is omitted, only the fluent API is used.
-c --context <NAME> Der Name der zu generierenden DbContext-Klasse.The name of the DbContext class to generate.
--context-dir <PATH> Das Verzeichnis, in das die DbContext Klassendatei eingefügt werden soll.The directory to put the DbContext class file in. Pfade sind relativ zum Projektverzeichnis.Paths are relative to the project directory. Namespaces werden aus den Ordnernamen abgeleitet.Namespaces are derived from the folder names.
-f --force Überschreibt vorhandene Dateien.Overwrite existing files.
-o --output-dir <PATH> Das Verzeichnis, in dem Entitäts Klassendateien abgelegt werden sollen.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 von Tabellen, für die Entitäts Typen generiert werden sollen.The schemas of tables to generate entity types for. Wenn Sie mehrere Schemas angeben möchten, wiederholen Sie die --schema.To specify multiple schemas, repeat --schema for each one. Wenn diese Option weggelassen wird, werden alle Schemas eingeschlossen.If this option is omitted, all schemas are included.
-t --table <TABLE_NAME>...--table <TABLE_NAME>... Die Tabellen, für die Entitäts Typen generiert werden sollen.The tables to generate entity types for. Wenn Sie mehrere Tabellen angeben möchten, wiederholen Sie die -t oder --table.To specify multiple tables, repeat -t or --table for each one. Wenn diese Option weggelassen wird, werden alle Tabellen eingeschlossen.If this option is omitted, all tables are included.
--use-database-names Verwenden Sie Tabellen-und Spaltennamen genau so, wie Sie in der Datenbank angezeigt werden.Use table and column names exactly as they appear in the database. Wenn diese Option weggelassen wird, werden die Datenbanknamen entsprechend den C# Namensformat Konventionen genauer angepasst.If this option is omitted, database names are changed to more closely conform to C# name style conventions.

Im folgenden Beispiel wird ein Gerüst für alle Schemas und Tabellen und die neuen Dateien im Ordner " Models " eingefügt.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

Im folgenden Beispiel wird nur ein Gerüst für ausgewählte Tabellen erstellt, und der Kontext wird in einem separaten Ordner mit einem 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-Migrationen hinzufügendotnet 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 zu verwendende Verzeichnis (und der untergeordnete Namespace).The directory (and sub-namespace) to use. Pfade sind relativ zum Projektverzeichnis.Paths are relative to the project directory. Der Standardwert ist "Migrationen".Defaults to "Migrations".

DotNet EF-Migrations Listedotnet ef migrations list

Listet verfügbare Migrationen auf.Lists available migrations.

DotNet EF-Migrationen entfernendotnet ef migrations remove

Entfernt die letzte Migration (führt einen Rollback für die Codeänderungen aus, 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 Setzen Sie die Migration zurück (führen Sie ein Rollback der Änderungen aus, die auf die Datenbank angewendet wurden).Revert the migration (roll back the changes that were applied to the database).

DotNet EF-Migrations Skriptdotnet ef migrations script

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

Argumente:Arguments:

ArgumentArgument BeschreibungDescription
<FROM> Die Migration wird gestartet.The starting migration. Migrationen können anhand des Namens oder der ID identifiziert werden.Migrations may be identified by name or by ID. Die Zahl 0 (null) ist ein Sonderfall, der vor der ersten Migrationliegt.The number 0 is a special case that means before the first migration. Der Standardwert ist 0.Defaults to 0.
<TO> Die Beendigung der Migration.The ending migration. Standardmäßig wird die letzte Migration verwendet.Defaults to the last migration.

Optionen:Options:

OptionOption BeschreibungDescription
-o --output <FILE> Die Datei, in die das Skript geschrieben werden soll.The file to write the script to.
-i --idempotent Generieren Sie ein Skript, das bei jeder Migration in einer Datenbank verwendet werden kann.Generate a script that can be used on a database at any migration.

Im folgenden Beispiel wird ein Skript für die InitialCreate-Migration erstellt:The following example creates a script for the InitialCreate migration:

dotnet ef migrations script 0 InitialCreate

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

dotnet ef migrations script 20180904195021_InitialCreate

Zusätzliche RessourcenAdditional resources