Integração do Entity Framework Core MSBuild
A partir do EF 9, você pode usar uma tarefa do MSBuild para gerar o modelo compilado e as consultas pré-compiladas automaticamente quando o projeto é criado ou publicado. Isso se destina principalmente a ser usado com a publicação NativeAOT.
Aviso
O suporte ao NativeAOT e a integração do MSBuild são recursos experimentais e ainda não são adequados para uso em produção.
Instalando as tarefas
Para começar, instale o pacote NuGet Microsoft.EntityFrameworkCore.Tasks. Por exemplo:
dotnet add package Microsoft.EntityFrameworkCore.Tasks
Observação
Cada projeto que precisa ser compilado com arquivos gerados deve fazer referência ao pacote NuGet, ele não é transitivo por padrão.
Usando as tarefas
Se o projeto especificar <PublishAot>true</PublishAot>
, por padrão, a tarefa do MSBuild gerará um modelo compilado e consultas pré-compiladas durante a publicação. Caso contrário, você pode definir as seguintes propriedades para controlar o comportamento de geração:
Propriedade do MSBuild | Descrição |
---|---|
EFOptimizeContext | Defina como para habilitar a true integração do MSBuild. |
EFScaffoldModelStage | Defina como publish ou build none para indicar em qual estágio o modelo compilado será gerado. Assume o padrão de publish . |
EFPrecompileQueriesStage | Defina como publish ou build none para indicar em qual estágio as consultas pré-compiladas serão geradas. Assume o padrão de publish . |
DbContextName | A classe derivada DbContext a ser usada. Somente nome de classe ou totalmente qualificado com namespaces. Se essa opção for omitida, o EF Core executará a geração para todas as classes de contexto no projeto. |
EFTargetNamespace | O namespace que será utilizado em todas as classes geradas. Se essa opção for omitida, o EF Core usará $(RootNamespace) . |
EFOutputDir | A pasta para colocar os arquivos gerados antes que o projeto seja compilado. Se essa opção for omitida, o EF Core usará $(IntermediateOutputPath) . |
EFNullable | Se os tipos de referência anuláveis serão usados no código gerado. Se essa opção for omitida, o EF Core usará $(Nullable) . |
Limitações
- Um projeto de inicialização diferente não pode ser especificado ao usar essa abordagem, pois introduziria uma dependência de build inversa. Isso significa que o projeto de contexto precisa ser autossuficiente em termos de configuração, portanto, se seu aplicativo normalmente configura o contexto usando um construtor de host em um projeto diferente, você precisará implementar IDesignTimeDbContextFactory<TContext> no projeto de contexto.
- Como o projeto precisa ser compilável antes que o modelo compilado seja gerado, essa abordagem não dá suporte a implementações parciais de método para personalização do modelo compilado.
- Atualmente, isso sempre gerará código adicional no modelo compilado necessário para o NativeAOT. Se você não estiver planejando habilitar o NativeAOT, gere o modelo compilado usando as ferramentas da CLI.