Partage via


Services à la conception

Certains services utilisés par les outils sont utilisés uniquement au moment de la conception. Ces services sont gérés séparément des services de runtime d’EF Core pour les empêcher d’être déployés avec votre application. Pour remplacer l’un de ces services (par exemple le service pour générer des fichiers de migration), ajoutez une implémentation de IDesignTimeServices à votre projet de démarrage.

internal class MyDesignTimeServices : IDesignTimeServices
{
    public void ConfigureDesignTimeServices(IServiceCollection services)
        => services.AddSingleton<IMigrationsCodeGenerator, MyMigrationsCodeGenerator>();
}

Référencer Microsoft.EntityFrameworkCore.Design

Microsoft.EntityFrameworkCore.Design est un package DevelopmentDependency. Cela signifie que la dépendance ne circule pas de manière transitive dans d’autres projets et que vous ne pouvez pas (par défaut) faire référence à ses types.

Pour référencer ses types et remplacer les services à la conception, mettez à jour les métadonnées de l’élément PackageReference dans votre fichier projet.

<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.9">
  <PrivateAssets>all</PrivateAssets>
  <!-- Remove IncludeAssets to allow compiling against the assembly -->
  <!--<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>-->
</PackageReference>

Si le package est référencé de manière transitive via Microsoft.EntityFrameworkCore.Tools, vous devez ajouter un PackageReference explicite au package et modifier ses métadonnées.

Liste des services

Voici une liste des services à la conception.

Service Description
IAnnotationCodeGenerator Génère le code pour les annotations de modèle correspondantes.
ICSharpHelper Aide à générer du code C#.
IPluralizer Pluralise et singularise les mots.
IMigrationsCodeGenerator Génère du code pour une migration.
IMigrationsScaffolder Classe principale pour gérer les fichiers de migration.
IDatabaseModelFactory Crée un modèle de base de données à partir d’une base de données.
IModelCodeGenerator Génère du code pour un modèle.
IProviderConfigurationCodeGenerator Génère du code OnConfiguring.
IReverseEngineerScaffolder Classe principale pour la génération automatique de modèles à ingénierie inverse.
IScaffoldingModelFactory Crée un modèle à partir d’une base de données.

Utiliser des services

Ces services peuvent également être utiles pour créer vos propres outils. Par exemple, lorsque vous souhaitez automatiser une partie de votre workflow à la conception.

Vous pouvez créer un fournisseur de services qui contient ces services à l’aide des méthodes d’extension AddEntityFrameworkDesignTimeServices et AddDbContextDesignTimeServices.

var db = new MyDbContext();

// Create design-time services
var serviceCollection = new ServiceCollection();
serviceCollection.AddEntityFrameworkDesignTimeServices();
serviceCollection.AddDbContextDesignTimeServices(db);
var serviceProvider = serviceCollection.BuildServiceProvider();

// Add a migration
var migrationsScaffolder = serviceProvider.GetService<IMigrationsScaffolder>();
var migration = migrationsScaffolder.ScaffoldMigration(migrationName, rootNamespace);
migrationsScaffolder.Save(projectDir, migration, outputDir);