Entity Framework Core integração com o 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 deve ser usado principalmente 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 Microsoft. EntityFrameworkCore.Tasks pacote NuGet. 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 true para habilitar a integração com o MSBuild. EF Core 9-10 somente — removido no EF Core 11.
EFScaffoldModelStage Defina como publishou buildnone para indicar em qual estágio o modelo compilado será gerado. O padrão é publish.
EFPrecompileQueriesStage Defina como publishou buildnone para indicar em qual estágio as consultas pré-compiladas serão geradas. O padrão é publish.
DbContextName A classe derivada DbContext a ser usada. Somente nome de classe ou qualificado por inteiro com os 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).

Observação

A partir do EF Core 11, a EFOptimizeContext propriedade foi removida. As propriedades EFScaffoldModelStage e EFPrecompileQueriesStage agora funcionam de forma independente e não requerem mais um sinalizador de habilitação adicional.

Limitações

  • Ao usar a integração durante o estágio publish, também defina o rid no projeto de inicialização (como, por exemplo, <RuntimeIdentifier>win-x64</RuntimeIdentifier>)
  • 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