Compartilhar via


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 publishou build none para indicar em qual estágio o modelo compilado será gerado. Assume o padrão de publish.
EFPrecompileQueriesStage Defina como publishou 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.

Recursos adicionais