Design-time services
Some services used by the tools are only used at design time. These services are managed separately from EF Core's runtime services to prevent them from being deployed with your app. To override one of these services (for example the service to generate migration files), add an implementation of IDesignTimeServices
to your startup project.
internal class MyDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection services)
=> services.AddSingleton<IMigrationsCodeGenerator, MyMigrationsCodeGenerator>();
}
Referencing Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Design is a DevelopmentDependency package. This means that the dependency won't flow transitively into other projects, and that you cannot, by default, reference its types.
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>
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.
List of services
The following is a list of the design-time services.
Service | Description |
---|---|
IAnnotationCodeGenerator | Generates the code for corresponding model annotations. |
ICSharpHelper | Helps with generating C# code. |
IPluralizer | Pluralizes and singularizes words. |
IMigrationsCodeGenerator | Generates code for a migration. |
IMigrationsScaffolder | The main class for managing migration files. |
IDatabaseModelFactory | Creates a database model from a database. |
IModelCodeGenerator | Generates code for a model. |
IProviderConfigurationCodeGenerator | Generates OnConfiguring code. |
IReverseEngineerScaffolder | The main class for scaffolding reverse engineered models. |
IScaffoldingModelFactory | Creates a model from a database model. |
Using services
These services can also be useful for creating your own tools. For example, when you want to automate part of you design-time workflow.
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);
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: I hele 2024 udfaser vi GitHub-problemer som feedbackmekanisme for indhold og erstatter det med et nyt feedbacksystem. Du kan få flere oplysninger under:Indsend og få vist feedback om