Freigeben über


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