Entwurfszeitdienste
Einige von den Tools verwendete Dienste werden nur zur Entwurfszeit 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 (z. B. den Dienst zum Generieren von Migrationsdateien) außer Kraft zu setzen, fügen Sie Ihrem Startprojekt eine Implementierung von 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 Das bedeutet, dass die Abhängigkeit nicht transitiv auf andere Projekte übertragen wird und Sie standardmäßig nicht auf ihre 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="3.1.9">
<PrivateAssets>all</PrivateAssets>
<!-- Remove IncludeAssets to allow compiling against the assembly -->
<!--<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>-->
</PackageReference>
Wenn transitiv über via Microsoft.EntityFrameworkCore.Tools auf das Paket verwiesen wird, müssen Sie dem Paket eine explizite PackageReference hinzufügen und seine Metadaten ändern.
Liste der Dienste
Es folgt eine Liste der Entwurfszeitdienste.
Dienst | Beschreibung |
---|---|
IAnnotationCodeGenerator | Generiert den Code für entsprechende Modellanmerkungen. |
ICSharpHelper | Hilft beim Generieren von C#-Code. |
IPluralizer | Pluralisiert und singularisiert Wörter. |
IMigrationsCodeGenerator | Erzeugt Code für eine Migration. |
IMigrationsScaffolder | Die Hauptklasse zum Verwalten von Migrationsdateien. |
IDatabaseModelFactory | Erstellt ein Datenbankmodell aus einer Datenbank. |
IModelCodeGenerator | Erzeugt Code für ein Modell. |
IProviderConfigurationCodeGenerator | Erzeugt OnConfiguring-Code. |
IReverseEngineerScaffolder | Die Hauptklasse für Gerüste für Reverse Engineering-Modelle. |
IScaffoldingModelFactory | Erstellt ein Datenbankmodell aus einer Datenbank. |
Verwenden von Diensten
Diese Dienste können auch hilfreich sein, um eigene Tools zu erstellen. Wenn Sie beispielsweise einen Teil des Entwurfszeitworkflows automatisieren möchten.
Sie können einen Dienstanbieter erstellen, der diese Dienste enthält, mithilfe der Erweiterungsmethoden AddEntityFrameworkDesignTimeServices und 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);