Partilhar via


Integração do Entity Framework Core MSBuild

A partir do EF 9, você pode usar uma tarefa MSBuild para gerar o modelo compilado e consultas pré-compiladas automaticamente quando o projeto é criado ou quando é publicado. Isto destina-se principalmente a ser utilizado com a publicação do NativeAOT.

Advertência

O suporte NativeAOT e a integração 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 Microsoft.EntityFrameworkCore.Tasks NuGet. Por exemplo:

dotnet add package Microsoft.EntityFrameworkCore.Tasks

Observação

Todo projeto que precisa ser compilado com arquivos gerados deve fazer referência ao pacote NuGet, ele não é transitivo por padrão.

Utilização das tarefas

Se o projeto especificar <PublishAot>true</PublishAot> então, por padrão, a tarefa 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 MSBuild Descrição
EFOptimizeContext Defina como true para habilitar a integração do MSBuild.
EFScaffoldModelStage Defina como publish, build ou none para indicar em que estágio o modelo compilado será gerado. O valor padrão é publish.
EFPrecompileQueriesStage Defina como publish, build ou none para indicar em que estágio as consultas pré-compiladas serão geradas. O padrão é publish.
DbContextName A classe derivada DbContext a utilizar. Nome da classe somente 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 a ser usado para 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

  • Ao usar a integração durante o estágio de publish também defina o rid no projeto de inicialização (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 compilação 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ê precisaria 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 oferece 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 não estiveres a planear habilitar o NativeAOT, gera o modelo compilado usando as ferramentas da CLI.

Recursos adicionais