Partager via


Informations de référence sur les outils Entity Framework Core - CLI .NET Core

Les outils d’interface de ligne de commande (CLI) pour Entity Framework Core effectuent des tâches de développement au moment du design. Par exemple, ils créent migrations, appliquent des migrations et génèrent du code pour un modèle basé sur une base de données existante. Les commandes sont une extension de la commande dotnet multiplateforme, qui fait partie du sdk .NET Core. Ces outils fonctionnent avec des projets .NET Core.

Lorsque vous utilisez Visual Studio, envisagez d’utiliser les outils de console du gestionnaire de package au lieu des outils CLI. Les outils de console du gestionnaire de package vont automatiquement :

  • Fonctionner avec le projet actuel sélectionné dans la console du gestionnaire de package sans avoir à changer manuellement de répertoires.
  • Ouvrir les fichiers générés par une commande une fois la commande terminée.
  • Fournir la saisie semi-automatique de tabulation des commandes, des paramètres, des noms de projet, des types de contexte et des noms de migration.

Installation des outils

dotnet ef peut être installé en tant qu’outil global ou local. La plupart des développeurs préfèrent installer dotnet ef en tant qu’outil global à l’aide de la commande suivante :

dotnet tool install --global dotnet-ef

Pour l’utiliser comme outil local, restaurez les dépendances d’un projet qui le déclare en tant que dépendance d’outil en utilisant un fichier manifeste d’outil.

Mettez à jour l’outil à l’aide de la commande suivante :

dotnet tool update --global dotnet-ef

Avant de pouvoir utiliser les outils d’un projet spécifique, vous devez y ajouter le package Microsoft.EntityFrameworkCore.Design.

dotnet add package Microsoft.EntityFrameworkCore.Design

Vérifier l’installation

Exécutez les commandes suivantes pour vérifier que les outils EF Core CLI sont correctement installés :

dotnet ef

La sortie de la commande identifie la version des outils en cours d’utilisation :


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

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

<Usage documentation follows, not shown.>

Mettre à jour Data Lake Tools

Utilisez dotnet tool update --global dotnet-ef pour mettre à jour les outils globaux vers la dernière version disponible. Si les outils sont installés localement dans votre projet, utilisez dotnet tool update dotnet-ef. Installez une version spécifique en ajoutant --version <VERSION> à votre commande. Pour plus d’informations, consultez la section Update de la documentation de l’outil dotnet.

Utilisation des outils

Avant d’utiliser les outils, vous devrez peut-être créer un projet de démarrage ou définir l’environnement.

Projet cible et projet de démarrage

Les commandes font référence à un projet et à un projet de start-up.

  • Le projet est également appelé projet cible, car il s’agit de l’emplacement où les commandes ajoutent ou suppriment des fichiers. Par défaut, le projet dans le répertoire actif est le projet cible. Vous pouvez spécifier un autre projet en tant que projet cible à l’aide du paramètre --project.

  • Le projet de start-up est celui que les outils créent et exécutent. Les outils doivent exécuter du code d’application au moment du design pour obtenir des informations sur le projet, telles que la chaîne de connexion de base de données et la configuration du modèle. Par défaut, le projet dans le répertoire actif est le projet de démarrage. Vous pouvez spécifier un autre projet en tant que projet de démarrage à l’aide de l’option --startup-project.

Le projet de démarrage et le projet cible sont souvent le même projet. Un scénario classique dans lequel ils sont des projets distincts est le cas :

  • Le contexte EF Core et les classes d’entité se trouvent dans une bibliothèque de classes .NET Core.
  • Une application console .NET Core ou une application web fait référence à la bibliothèque de classes.

Il est également possible de placer du code de migration dans une bibliothèque de classes distincte du contexte EF Core.

Autres frameworks cibles

Les outils CLI fonctionnent avec des projets .NET Core et des projets .NET Framework. Les applications qui ont le modèle EF Core dans une bibliothèque de classes .NET Standard peuvent ne pas avoir de projet .NET Core ou .NET Framework. Par exemple, cela est vrai pour les applications de plateforme Windows universelle et Xamarin. Dans ce cas, vous pouvez créer un projet d’application console .NET Core dont seul l’objectif est d’agir comme projet de démarrage pour les outils. Le projet peut être un projet factice sans code réel, il n’est nécessaire que de fournir une cible pour les outils.

Pourquoi un projet factice est-il nécessaire ? Comme mentionné précédemment, les outils doivent exécuter du code d’application au moment du design. Pour ce faire, ils doivent utiliser le runtime .NET Core. Lorsque le modèle EF Core se trouve dans un projet qui cible .NET Core ou .NET Framework, les outils EF Core empruntent le runtime du projet. Ils ne peuvent pas le faire si le modèle EF Core se trouve dans une bibliothèque de classes .NET Standard. .NET Standard n’est pas une implémentation .NET réelle ; il s’agit d’une spécification d’un ensemble d’API que les implémentations .NET doivent prendre en charge. Par conséquent, .NET Standard n’est pas suffisant pour que les outils EF Core exécutent du code d’application. Le projet factice que vous créez à utiliser comme projet de démarrage fournit une plateforme cible concrète dans laquelle les outils peuvent charger la bibliothèque de classes .NET Standard.

Environnement ASP.NET Core

Vous pouvez spécifier l’environnement pour les projets ASP.NET Core sur la ligne de commande. Cela et tous les arguments supplémentaires sont passés dans Program.CreateHostBuilder.

dotnet ef database update -- --environment Production

Conseil

Le jeton -- dirige dotnet ef pour traiter tout ce qui suit comme argument, sans essayer de les analyser en tant qu’options. Tous les arguments supplémentaires, non utilisés par dotnet ef, sont transférés à l’application.

Options courantes

Option Court Description
--json Afficher la sortie JSON.
--context <DBCONTEXT> -c Classe DbContext à utiliser. Nom de classe uniquement ou qualifié complet avec des espaces de noms. Si cette option est omise, EF Core trouve la classe de contexte. S’il existe plusieurs classes de contexte, cette option est requise.
--project <PROJECT> -p Chemin d’accès relatif au dossier du projet cible. La valeur par défaut est le dossier actif.
--startup-project <PROJECT> -s Chemin d’accès relatif au dossier du projet de démarrage. La valeur par défaut est le dossier actif.
--framework <FRAMEWORK> Le Moniker de tramework cible pour le framework cible. Utilisez lorsque le fichier projet spécifie plusieurs frameworks cibles et que vous souhaitez sélectionner l’un d’eux.
--configuration <CONFIGURATION> Configuration de build, par exemple : Debug ou Release.
--runtime <IDENTIFIER> Identificateur du runtime cible pour lequel restaurer des packages. Pour connaître les identificateurs de runtime, consultez le catalogue des identificateurs de runtime.
--no-build Ne générez pas le projet. Destiné à être utilisé lorsque la build est à jour.
--help -h Afficher les informations d’aide.
--verbose -v Afficher la sortie détaillée.
--no-color Ne colorisez pas la sortie.
--prefix-output Sortie de préfixe avec niveau.

Tous les arguments supplémentaires sont passés à l’application.

dotnet ef database drop

Supprime la base de données.

Options :

Option Court Description
--force -f Ne confirmez pas.
--dry-run Affichez la base de données à supprimer, mais ne la supprimez pas.

Les options courantes sont répertoriées ci-dessus.

dotnet ef database update

Met à jour la base de données vers la dernière migration ou vers une migration spécifiée.

Arguments :

Argument Description
<MIGRATION> Migration cible. Les migrations peuvent être identifiées par nom ou par ID. Le nombre 0 est un cas spécial qui signifie avant le premier de migration et entraîne la restauration de toutes les migrations. Si aucune migration n’est spécifiée, la commande est définie par défaut sur la dernière migration.

Options :

Option Description
--connection <CONNECTION> Chaîne de connexion à la base de données. La valeur par défaut est celle spécifiée dans AddDbContext ou OnConfiguring.

Les options courantes sont répertoriées ci-dessus.

Les exemples suivants mettent à jour la base de données vers une migration spécifiée. La première utilise le nom de la migration et la seconde utilise l’ID de migration et une connexion spécifiée :

dotnet ef database update InitialCreate
dotnet ef database update 20180904195021_InitialCreate --connection your_connection_string

dotnet ef dbcontext info

Obtient des informations sur un type de DbContext.

Les options courantes sont répertoriées ci-dessus.

dotnet ef dbcontext list

Répertorie les types de DbContext disponibles.

Les options courantes sont répertoriées ci-dessus.

dotnet ef dbcontext optimize

Génère une version compilée du modèle utilisé par les DbContext requêtes et précompiles.

Pour plus d’informations, consultez modèles compilés.

Options :

Option Court Description
--output-dir <PATH> -o Répertoire dans lequel placer des fichiers. Les chemins d’accès sont relatifs au répertoire du projet.
--namespace <NAMESPACE> -n Espace de noms à utiliser pour toutes les classes générées. Valeurs par défaut à générer à partir de l’espace de noms racine et du répertoire de sortie plus CompiledModels.
--suffix <SUFFIX> Suffixe à attacher au nom de tous les fichiers générés. Par exemple, .g peut être utilisé pour indiquer que ces fichiers contiennent du code généré
--no-scaffold Ne générez pas de modèle compilé. Cela est utilisé lorsque le modèle compilé a déjà été généré.
--precompile-queries Générez des requêtes précompilées. Cette opération est requise pour la compilation NativeAOT si le projet cible contient des requêtes
--nativeaot Générer du code supplémentaire dans le modèle compilé requis pour la compilation NativeAOT et les requêtes précompilées

Remarque

La prise en charge nativeAOT et les requêtes précompilées sont considérées comme expérimentales dans EF 9 et peuvent changer considérablement dans la prochaine version.

Les options courantes sont répertoriées ci-dessus.

L’exemple suivant utilise les paramètres par défaut et fonctionne s’il n’existe qu’un seule DbContext dans le projet :

dotnet ef dbcontext optimize

L’exemple suivant optimise le modèle pour le contexte avec le nom spécifié et le place dans un dossier et un espace de noms distincts :

dotnet ef dbcontext optimize -o Models -n BlogModels -c BlogContext

dotnet ef dbcontext scaffold

Génère du code pour un DbContext et des types d’entités pour une base de données. Pour que cette commande génère un type d’entité, la table de base de données doit avoir une clé primaire.

Arguments :

Argument Description
<CONNECTION> Chaîne de connexion à la base de données. Pour ASP.NET projets Core 2.x, la valeur peut être name=<nom de la chaîne de connexion>. Dans ce cas, le nom provient des sources de configuration configurées pour le projet.
<PROVIDER> Fournisseur à utiliser. En règle générale, il s’agit du nom du package NuGet, par exemple : Microsoft.EntityFrameworkCore.SqlServer.

Options :

Option Court Description
--data-annotations -d Utilisez des attributs pour configurer le modèle (le cas échéant). Si cette option est omise, seule l’API Fluent est utilisée.
--context <NAME> -c Nom de la classe DbContext à générer.
--context-dir <PATH> Répertoire dans lequel placer le fichier de classe DbContext. Les chemins d’accès sont relatifs au répertoire du projet. Les espaces de noms sont dérivés des noms de dossiers.
--context-namespace <NAMESPACE> Espace de noms à utiliser pour la classe DbContext générée. Remarque : remplace --namespace.
--force -f Remplacer les fichiers existants.
--output-dir <PATH> -o Répertoire dans lequel placer des fichiers de classe d’entité. Les chemins d’accès sont relatifs au répertoire du projet.
--namespace <NAMESPACE> -n Espace de noms à utiliser pour toutes les classes générées. La valeur par défaut est générée à partir de l’espace de noms racine et du répertoire de sortie.
--schema <SCHEMA_NAME>... Schémas de tables et de vues pour générant des types d’entités. Pour spécifier plusieurs schémas, répétez --schema pour chacun d’eux. Si cette option est omise, tous les schémas sont inclus. Si cette option est utilisée, toutes les tables et vues dans les schémas seront incluses dans le modèle, même si elles ne sont pas explicitement incluses à l’aide de --table.
--table <TABLE_NAME>... -t Tables et vues pour générant des types d’entités. Pour spécifier plusieurs tables, répétez -t ou --table pour chacune d’elles. Vous pouvez inclure des tables ou des vues dans un schéma spécifique à l’aide du format « schema.table » ou « schema.view ». Si cette option est omise, toutes les tables et vues sont incluses.
--use-database-names Utilisez des noms de table, d’affichage, de séquence et de colonne exactement comme ils apparaissent dans la base de données. Si cette option est omise, les noms de base de données sont modifiés de manière plus étroitement conforme aux conventions de style de nom C#.
--no-onconfiguring Supprime la génération de la méthode OnConfiguring dans la classe DbContext générée.
--no-pluralize N’utilisez pas le pluralisateur.

Les options courantes sont répertoriées ci-dessus.

L’exemple suivant génère une structure de tous les schémas et tables et place les nouveaux fichiers dans le dossier Models .

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

L’exemple suivant crée uniquement des tables sélectionnées et crée le contexte dans un dossier distinct avec un nom et un espace de noms spécifiés :

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 --context-namespace New.Namespace

L’exemple suivant lit la chaîne de connexion à partir du jeu de configuration du projet à l’aide de l’outil Secret Manager.

dotnet user-secrets set ConnectionStrings:Blogging "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Blogging"
dotnet ef dbcontext scaffold Name=ConnectionStrings:Blogging Microsoft.EntityFrameworkCore.SqlServer

L’exemple suivant ignore la structure d’une méthode OnConfiguring. Cela peut être utile lorsque vous souhaitez configurer DbContext en dehors de la classe. Par exemple, ASP.NET applications Core le configurent généralement dans Startup.ConfigureServices.

dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;User Id=myUsername;Password=myPassword;" Microsoft.EntityFrameworkCore.SqlServer --no-onconfiguring

dotnet ef dbcontext script

Génère un script SQL à partir de DbContext. Contourne toutes les migrations.

Options :

Option Court Description
--output <FILE> -o Fichier dans lequel écrire le résultat.

Les options courantes sont répertoriées ci-dessus.

dotnet ef migrations add

Ajoute une nouvelle migration.

Arguments :

Argument Description
<NAME> Nom de la migration.

Options :

Option Court Description
--output-dir <PATH> -o Répertoire utilisé pour générer les fichiers. Les chemins d’accès sont relatifs au répertoire du projet cible. La valeur par défaut est « Migrations ».
--namespace <NAMESPACE> -n Espace de noms à utiliser pour les classes générées. Valeurs par défaut à générer à partir du répertoire de sortie.

Les options courantes sont répertoriées ci-dessus.

dotnet ef migrations bundle

Crée un exécutable pour mettre à jour la base de données.

Options :

Option Court Description
--output <FILE> -o Chemin d’accès du fichier exécutable à créer.
--force -f Remplacer les fichiers existants.
--self-contained Regroupez également le runtime .NET afin qu’il n’ait pas besoin d’être installé sur l’ordinateur.
--target-runtime <RUNTIME_IDENTIFIER> -r Runtime cible pour lequel regrouper.

Les options courantes sont répertoriées ci-dessus.

dotnet ef migrations has-pending-model-changes

Remarque

Cette commande a été ajoutée dans EF Core 8.0.

Vérifie si des modifications ont été apportées au modèle depuis la dernière migration.

Options :

Les options courantes sont répertoriées ci-dessus.

dotnet ef migrations list

Répertorie les migrations disponibles.

Options :

Option Description
--connection <CONNECTION> Chaîne de connexion à la base de données. La valeur par défaut est celle spécifiée dans AddDbContext ou OnConfiguring.
--no-connect Ne vous connectez pas à la base de données.

Les options courantes sont répertoriées ci-dessus.

dotnet ef migrations remove

Supprime la dernière migration, en supprimant les modifications de code effectuées pour la dernière migration.

Options :

Option Court Description
--force -f Rétablir la dernière migration, restaurer à la fois le code et les modifications de base de données effectuées pour la dernière migration. Continue de restaurer uniquement le code si une erreur se produit lors de la connexion à la base de données.

Les options courantes sont répertoriées ci-dessus.

dotnet ef migrations script

Génère un script SQL à partir de migrations.

Arguments :

Argument Description
<FROM> Migration de départ. Les migrations peuvent être identifiées par nom ou par ID. Le nombre 0 est un cas spécial qui signifie avant la première migration. La valeur par défaut est 0.
<TO> Migration de fin. Valeur par défaut de la dernière migration.

Options :

Option Court Description
--output <FILE> -o Fichier dans lequel écrire le script.
--idempotent -i Générez un script qui peut être utilisé sur une base de données à n’importe quelle migration.
--no-transactions Ne générez pas d’instructions de transaction SQL.

Les options courantes sont répertoriées ci-dessus.

L’exemple suivant crée un script pour la migration InitialCreate :

dotnet ef migrations script 0 InitialCreate

L’exemple suivant crée un script pour toutes les migrations après la migration InitialCreate.

dotnet ef migrations script 20180904195021_InitialCreate

Ressources supplémentaires