Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Alguns serviços usados pelas ferramentas são usados apenas em tempo de projeto. Esses serviços são gerenciados separadamente dos serviços de runtime do EF Core para impedir que eles sejam implantados com seu aplicativo. Para substituir um desses serviços (por exemplo, o serviço para gerar arquivos de migração), adicione uma implementação de IDesignTimeServices ao seu projeto de inicialização.
internal class MyDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection services)
=> services.AddSingleton<IMigrationsCodeGenerator, MyMigrationsCodeGenerator>();
}
Referenciando Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Design é um pacote DevelopmentDependency. Isso significa que a dependência não fluirá transitivamente para outros projetos e que você não pode, por padrão, referenciar seus tipos.
Para referenciar seus tipos e sobrescrever serviços de design-time, atualize os metadados do item PackageReference no arquivo de projeto.
<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>
Se o pacote estiver sendo referenciado transitivamente por meio de Microsoft.EntityFrameworkCore.Tools, você precisará adicionar um PackageReference explícito ao pacote e alterar seus metadados.
Lista de serviços
Veja a seguir uma lista dos serviços disponíveis durante o tempo de design.
| Service | Description |
|---|---|
| IAnnotationCodeGenerator | Gera o código para as anotações correspondentes do modelo. |
| ICSharpHelper | Ajuda na geração de código C#. |
| IPluralizer | Pluraliza e singulariza palavras. |
| ICSharpMigrationOperationGenerator | Gera código C# para operações de migração. |
| ICSharpSnapshotGenerator | Gera código C# para instantâneos de modelo. |
| IMigrationsCodeGenerator | Gera código para uma migração. |
| IMigrationsCodeGeneratorSelector | Seleciona o gerador de código de migrações apropriado. |
| IMigrationsScaffolder | A classe principal para gerenciar arquivos de migração. |
| ICompiledModelCodeGenerator | Gera código para metadados de modelo compilados. |
| ICompiledModelCodeGeneratorSelector | Seleciona o gerador de código do modelo compilado apropriado. |
| ICompiledModelScaffolder | A classe principal para a estruturação de modelos compilados. |
| IDatabaseModelFactory | Cria um modelo de banco de dados de um banco de dados. |
| IModelCodeGenerator | Gera código para um modelo. |
| IModelCodeGeneratorSelector | Seleciona o gerador de código de modelo apropriado. |
| IProviderConfigurationCodeGenerator | Gera código para a função OnConfiguring. |
| IReverseEngineerScaffolder | A classe principal para a geração de modelos de engenharia reversa. |
| IScaffoldingModelFactory | Cria um modelo a partir de um modelo de banco de dados. |
| IPrecompiledQueryCodeGenerator | Gera código para consultas pré-compiladas. |
| IPrecompiledQueryCodeGeneratorSelector | Seleciona o gerador de código de consulta pré-compilado apropriado. |
Usando serviços
Esses serviços também podem ser úteis para criar suas próprias ferramentas. Por exemplo, quando você deseja automatizar parte do fluxo de trabalho em tempo de design.
Você pode criar um provedor de serviços que contém esses serviços usando os métodos de extensão AddEntityFrameworkDesignTimeServices e 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);