EntwurfszeitdiensteDesign-time services

Einige Dienste, die von den-Tools verwendet werden, werden nur zur Entwurfszeit verwendet.Some services used by the tools are only used at design time. Diese Dienste werden getrennt von den Lauf Zeit Diensten EF Core verwaltet, um zu verhindern, dass Sie mit Ihrer APP bereitgestellt werden.These services are managed separately from EF Core's runtime services to prevent them from being deployed with your app. Um einen dieser Dienste (z. b. den-Dienst zum Generieren von Migrations Dateien) zu überschreiben, fügen Sie dem Startprojekt eine Implementierung von hinzu IDesignTimeServices .To override one of these services (for example the service to generate migration files), add an implementation of IDesignTimeServices to your startup project.

class MyDesignTimeServices : IDesignTimeServices
{
    public void ConfigureDesignTimeServices(IServiceCollection services)
        => services.AddSingleton<IMigrationsCodeGenerator, MyMigrationsCodeGenerator>();
}

Verweisen auf "Microsoft. entityframeworkcore. Design"Referencing Microsoft.EntityFrameworkCore.Design

Microsoft. entityframeworkcore. Design ist ein developmentdepenket-Paket.Microsoft.EntityFrameworkCore.Design is a DevelopmentDependency package. Dies bedeutet, dass die Abhängigkeit nicht transitiv in andere Projekte fließt und dass Sie standardmäßig nicht auf die Typen verweisen können.This means that the dependency won't flow transitively into other projects, and that you cannot, by default, reference its types.

Um auf die Typen zu verweisen und Entwurfszeit Dienste zu überschreiben, aktualisieren Sie die Metadaten des packagereferenzierungselements in der Projektdatei.In order to reference its types and override design-time services, update the PackageReference item's metadata in your project file.

<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 auf das Paket transitiv über Microsoft. entityframeworkcore. Tools verwiesen wird, müssen Sie dem Paket eine explizite packagereferenzierung hinzufügen und die zugehörigen Metadaten ändern.If the package is being referenced transitively via Microsoft.EntityFrameworkCore.Tools, you will need to add an explicit PackageReference to the package and change its metadata.

Liste der DiensteList of services

Im folgenden finden Sie eine Liste der Entwurfszeit Dienste.The following is a list of the design-time services.

DienstService BESCHREIBUNGDescription
IAnnotationCodeGenerator Generiert den Code für entsprechende Modell Anmerkungen.Generates the code for corresponding model annotations.
ICSharpHelper Unterstützt die Erstellung von c#-Code.Helps with generating C# code.
IPluralizer Pluralisiert und singularisiert Wörter.Pluralizes and singularizes words.
IMigrationsCodeGenerator Generiert Code für eine Migration.Generates code for a migration.
IMigrationsScaffolder Die Hauptklasse für die Verwaltung von Migrations Dateien.The main class for managing migration files.
IDatabaseModelFactory Erstellt ein Datenbankmodell aus einer Datenbank.Creates a database model from a database.
IModelCodeGenerator Generiert Code für ein Modell.Generates code for a model.
IProviderConfigurationCodeGenerator Generiert den onkonfigurierungscode.Generates OnConfiguring code.
IReverseEngineerScaffolder Die Hauptklasse für das Gerüstbau von rückwärts entwickelten Modellen.The main class for scaffolding reverse engineered models.

Verwenden von DienstenUsing services

Diese Dienste können auch zum Erstellen eigener Tools nützlich sein.These services can also be useful for creating your own tools. Beispielsweise, wenn Sie einen Teil des Entwurfszeit Workflows automatisieren möchten.For example, when you want to automate part of you design-time workflow.

Mithilfe der Erweiterungs Methoden addentityframeworkdesigntimeservices und adddbcontextdesigntimeservices können Sie einen Dienstanbieter erstellen, der diese Dienste enthält.You can build a service provider containing these services using the AddEntityFrameworkDesignTimeServices and AddDbContextDesignTimeServices extension methods.

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