Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Alguns serviços utilizados pelas ferramentas são usados apenas em tempo de desenvolvimento. Esses serviços são gerenciados separadamente dos serviços de tempo de execução do EF Core para evitar que sejam implantados com seu aplicativo. Para substituir um desses serviços (por exemplo, o serviço para gerar ficheiros 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, fazer referência a seus tipos.
Para fazer referência a seus tipos e substituir serviços de tempo de design, atualize os metadados do item PackageReference em seu 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 via Microsoft.EntityFrameworkCore.Tools, você precisará adicionar um PackageReference explícito ao pacote e alterar seus metadados.
Lista de serviços
A seguir está uma lista dos serviços de tempo de design.
| Serviço | 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 de modelo compilado apropriado. |
| ICompiledModelScaffolder | A principal classe para modelos compilados de andaimes. |
| IDatabaseModelFactory | Cria um modelo de banco de dados a partir 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 OnConfiguring . |
| IReverseEngineerScaffolder | A principal classe para modelos de engenharia reversa de andaimes. |
| 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. |
Utilização de serviços
Esses serviços também podem ser úteis para criar suas próprias ferramentas. Por exemplo, quando deseja automatizar parte do seu fluxo de trabalho de design.
Você pode criar um provedor de serviços contendo 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);