Partager via


Intégration MSBuild Entity Framework Core

À compter d’EF 9, vous pouvez utiliser une tâche MSBuild pour générer automatiquement le modèle compilé et les requêtes précompilées lorsque le projet est généré ou lorsqu’il est publié. Cela est principalement destiné à être utilisé avec la publication NativeAOT.

Avertissement

La prise en charge nativeAOT et l’intégration MSBuild sont des fonctionnalités expérimentales et ne sont pas encore adaptées à l’utilisation de production.

Installation des tâches

Pour commencer, installez le package NuGet Microsoft.EntityFrameworkCore.Tasks. Par exemple :

dotnet add package Microsoft.EntityFrameworkCore.Tasks

Remarque

Chaque projet qui doit être compilé avec des fichiers générés doit référencer le package NuGet, il n’est pas transitif par défaut.

Utilisation des tâches

Si le projet spécifie <PublishAot>true</PublishAot> alors par défaut, la tâche MSBuild génère un modèle compilé et des requêtes précompilées pendant la publication. Sinon, vous pouvez définir les propriétés suivantes pour contrôler le comportement de génération :

Propriété MSBuild Description
EFOptimizeContext Définissez cette option pour true activer l’intégration MSBuild.
EFScaffoldModelStage Défini sur publish, build ou none pour indiquer à quel stade le modèle compilé sera généré. La valeur par défaut est publish.
EFPrecompileQueriesStage Défini sur publish, build ou none pour indiquer à quel stade les requêtes précompilées seront générées. La valeur par défaut est publish.
DbContextName Classe dérivée DbContext à utiliser. Nom de classe uniquement ou qualifié complet avec des espaces de noms. Si cette option est omise, EF Core effectue la génération pour toutes les classes de contexte du projet.
EFTargetNamespace Espace de noms à utiliser pour toutes les classes générées. Si cette option est omise, EF Core utilise $(RootNamespace).
EFOutputDir Dossier à placer les fichiers générés avant la compilation du projet. Si cette option est omise, EF Core utilise $(IntermediateOutputPath).
EFNullable Indique si les types de référence nullables seront utilisés dans le code généré. Si cette option est omise, EF Core utilise $(Nullable).

Limites

  • Un autre projet de démarrage ne peut pas être spécifié lors de l’utilisation de cette approche, car il introduit une dépendance de build inverse. Cela signifie que le projet de contexte doit être autosuficient en termes de configuration. Par conséquent, si votre application configure normalement le contexte à l’aide d’un générateur d’hôtes dans un autre projet, vous devez implémenter IDesignTimeDbContextFactory<TContext> dans le projet de contexte.
  • Étant donné que le projet doit être compilé avant la génération du modèle compilé, cette approche ne prend pas en charge les implémentations partielles de méthode pour la personnalisation du modèle compilé.
  • Actuellement, cela génère toujours du code supplémentaire dans le modèle compilé requis pour NativeAOT. Si vous ne prévoyez pas d’activer NativeAOT, générez le modèle compilé à l’aide des outils CLI.

Ressources supplémentaires