Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Einige der von den Tools verwendeten Dienste werden nur während der Entwurfsphase verwendet. Diese Dienste werden getrennt von den Laufzeitdiensten von EF Core verwaltet, um zu verhindern, dass sie mit Ihrer App bereitgestellt werden. Um einen dieser Dienste außer Kraft zu setzen (z. B. den Dienst zum Generieren von Migrationsdateien), fügen Sie ihrem Startprojekt eine Implementierung IDesignTimeServices hinzu.
internal class MyDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection services)
=> services.AddSingleton<IMigrationsCodeGenerator, MyMigrationsCodeGenerator>();
}
Verweisen auf Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Design ist ein DevelopmentDependency-Paket. Dies bedeutet, dass die Abhängigkeit nicht transitiv in andere Projekte übertragen wird, und dass Sie standardmäßig nicht auf deren Typen verweisen können.
Um auf die Typen zu verweisen und Entwurfszeitdienste außer Kraft zu setzen, aktualisieren Sie die Metadaten des PackageReference-Elements in Ihrer Projektdatei.
<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>
Wenn auf das Paket transitiv über Microsoft.EntityFrameworkCore.Tools verwiesen wird, müssen Sie dem Paket ein explizites PackageReference hinzufügen und dessen Metadaten ändern.
Liste der Dienstleistungen
Es folgt eine Liste der Designzeitdienste.
| Dienstleistung | Description |
|---|---|
| IAnnotationCodeGenerator | Generiert den Code für entsprechende Modellanmerkungen. |
| ICSharpHelper | Hilft beim Generieren von C#-Code. |
| IPluralizer | Pluralisiert und singularisiert Wörter. |
| ICSharpMigrationOperationGenerator | Generiert C#-Code für Migrationsvorgänge. |
| ICSharpSnapshotGenerator | Generiert C#-Code für Modell-Snapshots. |
| IMigrationsCodeGenerator | Generiert Code für eine Migration. |
| IMigrationsCodeGeneratorSelector | Wählt den entsprechenden Migrationscodegenerator aus. |
| IMigrationsScaffolder | Die Hauptklasse zum Verwalten von Migrationsdateien. |
| ICompiledModelCodeGenerator | Generiert Code für kompilierte Modellmetadaten. |
| ICompiledModelCodeGeneratorSelector | Wählt den entsprechenden kompilierten Modellcodegenerator aus. |
| ICompiledModelScaffolder | Die Hauptklasse für kompilierte Modelle des Gerüsts. |
| IDatabaseModelFactory | Erstellt ein Datenbankmodell aus einer Datenbank. |
| IModelCodeGenerator | Generiert Code für ein Modell. |
| IModelCodeGeneratorSelector | Wählt den entsprechenden Modellcodegenerator aus. |
| IProviderConfigurationCodeGenerator | Generiert OnConfiguring-Code. |
| IReverseEngineerScaffolder | Die Hauptklasse für Gerüste für Reverse Engineering-Modelle. |
| IScaffoldingModelFactory | Erstellt ein Modell aus einem Datenbankmodell. |
| IPrecompiledQueryCodeGenerator | Generiert Code für vorkompilierte Abfragen. |
| IPrecompiledQueryCodeGeneratorSelector | Wählt den entsprechenden vorkompilierten Abfragecodegenerator aus. |
Verwenden von Diensten
Diese Dienste können auch hilfreich sein, um Eigene Tools zu erstellen. Wenn Sie beispielsweise einen Teil Ihres Entwurfszeitworkflows automatisieren möchten.
Sie können einen Dienstanbieter erstellen, der diese Dienste enthält, mithilfe der Erweiterungsmethoden "AddEntityFrameworkDesignTimeServices" und "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);