Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Certains services utilisés par les outils sont utilisés uniquement au moment du design. Ces services sont gérés séparément des services d’exécution 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 transite pas de manière transitive vers d’autres projets et que vous ne pouvez pas, par défaut, référencer ses types.
Pour référencer ses types et remplacer les services au moment du design, mettez à jour les métadonnées de l’élément PackageReference dans votre fichier projet.
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.0">
<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é transitivement 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 au moment du design.
| Service | Descriptif |
|---|---|
| IAnnotationCodeGenerator | Génère le code des annotations de modèle correspondantes. |
| ICSharpHelper | Aide à générer du code C#. |
| IPluralizer | Pluralise et singularise les mots. |
| ICSharpMigrationOperationGenerator | Génère du code C# pour les opérations de migration. |
| ICSharpSnapshotGenerator | Génère du code C# pour les captures de modèle. |
| IMigrationsCodeGenerator | Génère du code pour une migration. |
| IMigrationsCodeGeneratorSelector | Sélectionne le générateur de code de migration approprié. |
| IMigrationsScaffolder | Classe principale pour la gestion des fichiers de migration. |
| ICompiledModelCodeGenerator | Génère du code pour les métadonnées du modèle compilé. |
| ICompiledModelCodeGeneratorSelector | Sélectionne le générateur de code de modèle compilé approprié. |
| ICompiledModelScaffolder | Classe principale pour l'échafaudage de modèles compilés. |
| 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. |
| IModelCodeGeneratorSelector | Sélectionne le générateur de code de modèle approprié. |
| IProviderConfigurationCodeGenerator | Génère du code OnConfiguring. |
| IReverseEngineerScaffolder | Classe principale pour l'échafaudage des modèles rétro-conçus. |
| IScaffoldingModelFactory | Crée un modèle à partir d’un modèle de base de données. |
| IPrecompiledQueryCodeGenerator | Génère du code pour les requêtes précompilées. |
| IPrecompiledQueryCodeGeneratorSelector | Sélectionne le générateur de code de requête précompilé approprié. |
Utilisation de services
Ces services peuvent également être utiles pour créer vos propres outils. Par exemple, lorsque vous souhaitez automatiser une partie de votre flux de travail au moment du design.
Vous pouvez créer un fournisseur de services contenant ces services à l’aide des méthodes d’extension AddEntityFrameworkDesignTimeServices et AddDbContextDesignTimeServices.
using var db = new MyDbContext();
// Create design-time services
var serviceCollection = new ServiceCollection();
serviceCollection.AddDbContextDesignTimeServices(db);
var provider = db.GetService<IDatabaseProvider>().Name;
var providerAssembly = Assembly.Load(new AssemblyName(provider));
var providerServicesAttribute = providerAssembly.GetCustomAttribute<DesignTimeProviderServicesAttribute>();
var designTimeServicesType = providerAssembly.GetType(providerServicesAttribute.TypeName, throwOnError: true);
((IDesignTimeServices)Activator.CreateInstance(designTimeServicesType)!).ConfigureDesignTimeServices(serviceCollection);
serviceCollection.AddEntityFrameworkDesignTimeServices();
var serviceProvider = serviceCollection.BuildServiceProvider();
// Add a migration
var migrationsScaffolder = serviceProvider.GetRequiredService<IMigrationsScaffolder>();
var migration = migrationsScaffolder.ScaffoldMigration(migrationName, rootNamespace);
migrationsScaffolder.Save(projectDir, migration, outputDir);