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);