Referência de ferramentas principais do Entity Framework - Console do Gerenciador de Pacotes no Visual Studio
As ferramentas do Console do Gestor de Pacotes (PMC) para o Entity Framework Core executam tarefas de desenvolvimento de design. Por exemplo, eles criam migrações , aplicam migrações e geram código para um modelo com base em um banco de dados existente. Os comandos são executados dentro do Visual Studio usando o Console do Gerenciador de Pacotes . Essas ferramentas funcionam com projetos .NET Framework e .NET Core.
Se não estiver a usar o Visual Studio, recomendamos as Ferramentas de Linha de Comando do EF Core como alternativa. As ferramentas da CLI do .NET Core são multiplataforma e executadas dentro de um prompt de comando.
Advertência
Este artigo usa um banco de dados local que não exige que o usuário seja autenticado. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos de teste e produção implantados, consulte Fluxos de autenticação seguros.
Instale as ferramentas
Instale as ferramentas do Console do Gerenciador de Pacotes executando o seguinte comando no Console do Gerenciador de Pacotes :
Install-Package Microsoft.EntityFrameworkCore.Tools
Atualize as ferramentas executando o seguinte comando no Console do Gerenciador de Pacotes .
Update-Package Microsoft.EntityFrameworkCore.Tools
Verifique a instalação
Verifique se as ferramentas estão instaladas executando este comando:
Get-Help about_EntityFrameworkCore
A saída tem esta aparência (não informa qual versão das ferramentas você está usando):
_/\__
---==/ \\
___ ___ |. \|\
| __|| __| | ) \\\
| _| | _| \_/ | //|\\
|___||_| / \\\/\\
TOPIC
about_EntityFrameworkCore
SHORT DESCRIPTION
Provides information about the Entity Framework Core Package Manager Console Tools.
<A list of available commands follows, omitted here.>
Utilize as ferramentas
Antes de utilizar as ferramentas:
- Entenda a diferença entre projeto alvo e startup.
- Saiba como usar as ferramentas com bibliotecas de classes do .NET Standard.
- Para ASP.NET projetos principais, defina o ambiente.
Projeto alvo e startup
Os comandos referem-se a um projeto e a um projeto startup .
O do projeto também é conhecido como o projeto de destino porque é onde os comandos adicionam ou removem arquivos. Por padrão, o projeto Padrão selecionado no Console do Gerenciador de Pacotes é o projeto de destino. Você pode especificar um projeto diferente como projeto de destino usando o parâmetro
.-Project
O projeto de inicialização é aquele que as ferramentas criam e executam. As ferramentas têm que executar o código do aplicativo em tempo de design para obter informações sobre o projeto, como a cadeia de conexão do banco de dados e a configuração do modelo. Por padrão, o Projeto de Inicialização no Gerenciador de Soluções é o projeto de inicialização. Você pode especificar um projeto diferente como projeto de inicialização usando o parâmetro
.-StartupProject
O projeto inicial e o projeto-alvo são muitas vezes o mesmo projeto. Um cenário típico em que são projetos separados é quando:
- O contexto do EF Core e as classes de entidade estão em uma biblioteca de classes do .NET Core.
- Um aplicativo de console .NET Core ou aplicativo Web faz referência à biblioteca de classes.
Também é possível colocar o código de migrações em uma biblioteca de classes separada do contexto do EF Core.
Outros quadros-alvo
As ferramentas do Console do Gerenciador de Pacotes funcionam com projetos .NET Core ou .NET Framework. Os aplicativos que têm o modelo EF Core em uma biblioteca de classes .NET Standard podem não ter um projeto .NET Core ou .NET Framework. Por exemplo, isso é verdade para aplicativos Xamarin e Plataforma Universal do Windows. Nesses casos, você pode criar um projeto de aplicativo de console .NET Core ou .NET Framework cuja única finalidade é atuar como projeto de inicialização para as ferramentas. O projeto pode ser um projeto fictício sem código real — é necessário apenas fornecer um alvo para as ferramentas.
Importante
Xamarin.Android, Xamarin.iOS, Xamarin.Mac agora estão integrados diretamente ao .NET (começando com .NET 6) como .NET para Android, .NET para iOS e .NET para macOS. Se você estiver criando com esses tipos de projeto hoje, eles devem ser atualizados para projetos no estilo SDK do .NET para suporte contínuo. Para obter mais informações sobre como atualizar projetos Xamarin para .NET, consulte a documentação Upgrade from Xamarin to .NET & .NET MAUI.
Por que é necessário um projeto fictício? Como mencionado anteriormente, as ferramentas têm que executar o código da aplicação em tempo de concepção. Para fazer isso, eles precisam usar o tempo de execução do .NET Core ou .NET Framework. Quando o modelo EF Core está em um projeto destinado ao .NET Core ou .NET Framework, as ferramentas do EF Core tomam emprestado o tempo de execução do projeto. Eles não podem fazer isso se o modelo EF Core estiver em uma biblioteca de classes .NET Standard. O .NET Standard não é uma implementação real do .NET; é uma especificação de um conjunto de APIs que as implementações .NET devem suportar. Portanto, o .NET Standard não é suficiente para que as ferramentas EF Core executem o código do aplicativo. O projeto fictício que você cria para usar como projeto de inicialização fornece uma plataforma de destino concreta na qual as ferramentas podem carregar a biblioteca de classes .NET Standard.
ASP.NET Ambiente central
Você pode especificar o ambiente para projetos ASP.NET Core na linha de comandos. Este e quaisquer argumentos adicionais são passados para Program.CreateHostBuilder.
Update-Database -Args '--environment Production'
Parâmetros comuns
A tabela a seguir mostra parâmetros que são comuns a todos os comandos do EF Core:
Parâmetro | Descrição |
---|---|
-Context <String> |
A classe DbContext a ser usada. Nome da classe somente ou totalmente qualificado com namespaces. Se esse parâmetro for omitido, o EF Core localizará a classe de contexto. Se houver várias classes de contexto, esse parâmetro será necessário. |
-Project <String> |
O projeto-alvo. Se esse parâmetro for omitido, o projeto padrão para o Console do Gerenciador de Pacotes será usado como o projeto de destino. |
-StartupProject <String> |
O projeto startup. Se esse parâmetro for omitido, o projeto de inicialização nas propriedades da solução será usado como o projeto de destino. |
-Args <String> |
Argumentos passados para o aplicativo. |
-Verbose |
Mostrar saída detalhada. |
Para mostrar informações de ajuda sobre um comando, use o comando Get-Help
do PowerShell.
Dica
Os parâmetros Context
, Project
e StartupProject
suportam a expansão por tabulação.
Add-Migration
Adiciona uma nova migração.
Parâmetros:
Parâmetro | Descrição |
---|---|
-Name <String> |
O nome da migração. Este é um parâmetro posicional e é obrigatório. |
-OutputDir <String> |
O diretório usado para saída dos arquivos. Os caminhos são relativos ao diretório do projeto de destino. O padrão é "Migrações". |
-Namespace <String> |
O namespace a ser usado para as classes geradas. Por defeito, é gerado a partir do diretório de saída. |
Os parâmetros comuns estão listados acima.
Bundle-Migration
Cria um executável para atualizar o banco de dados.
Parâmetros:
Parâmetro | Descrição |
---|---|
-Output <String> |
O caminho do arquivo executável a ser criado. |
-Force |
Substituir ficheiros existentes. |
-SelfContained |
Além disso, agrupe o tempo de execução do .NET para que ele não precise ser instalado na máquina. |
-TargetRuntime <String> |
O tempo de execução alvo para agrupar. |
-Framework <String> |
O quadro alvo. Por padrão, seleciona-se o primeiro no projeto. |
Os parâmetros comuns estão listados acima.
Drop-Database
Descarta o banco de dados.
Parâmetros:
Parâmetro | Descrição |
---|---|
-WhatIf |
Mostre qual banco de dados seria descartado, mas não o solte. |
Os parâmetros comuns estão listados acima.
Get-DbContext
Lista e obtém informações sobre os tipos de DbContext
disponíveis.
Os parâmetros comuns estão listados acima.
Get-Migration
Lista as migrações disponíveis.
Parâmetros:
Parâmetro | Descrição |
---|---|
-Connection <String> |
A cadeia de conexão com o banco de dados. O padrão é o especificado em AddDbContext ou OnConfiguring. |
-NoConnect |
Não se conecte ao banco de dados. |
Os parâmetros comuns estão listados acima.
Optimize-DbContext
Gera uma versão compilada do modelo usado pelo DbContext
.
Consulte Modelos compilados para obter mais informações.
Parâmetros:
Parâmetro | Descrição |
---|---|
-OutputDir <String> |
O diretório para colocar arquivos. Os caminhos são relativos ao diretório do projeto. |
-Namespace <String> |
O namespace a ser usado para todas as classes geradas. O padrão é gerado a partir do namespace raiz e do diretório de saída mais CompiledModels . |
Os parâmetros comuns estão listados acima.
Observação
As ferramentas PMC atualmente não suportam a geração de código necessário para a compilação NativeAOT e consultas pré-compiladas.
O exemplo a seguir usa os padrões e funciona se houver apenas um DbContext
no projeto:
Optimize-DbContext
O exemplo a seguir otimiza o modelo para o contexto com o nome especificado e o coloca em uma pasta e namespace separados:
Optimize-DbContext -OutputDir Models -Namespace BlogModels -Context BlogContext
Remove-Migration
Remove a última migração (reverte as alterações de código que foram feitas para a migração).
Parâmetros:
Parâmetro | Descrição |
---|---|
-Force |
Reverter a migração (reverter as alterações que foram aplicadas ao banco de dados). |
Os parâmetros comuns estão listados acima.
Scaffold-DbContext
Gera código para um DbContext
e tipos de entidade para uma base de dados. Para que Scaffold-DbContext
gere um tipo de entidade, a tabela do banco de dados deve ter uma chave primária.
Parâmetros:
Os parâmetros comuns estão listados acima.
Exemplo:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Exemplo que faz scaffold apenas às tabelas selecionadas e cria o contexto numa pasta separada com um nome e um namespace especificados.
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables "Blog","Post" -ContextDir Context -Context BlogContext -ContextNamespace New.Namespace
O exemplo a seguir lê a cadeia de conexão usando o Configuration.
Scaffold-DbContext "Name=ConnectionStrings:Blogging" Microsoft.EntityFrameworkCore.SqlServer
Script-DbContext
Gera um script SQL a partir do DbContext. Ignora quaisquer migrações.
Parâmetros:
Parâmetro | Descrição |
---|---|
-Output <String> |
O arquivo para gravar o resultado. |
Os parâmetros comuns estão listados acima.
Script-Migration
Gera um script SQL que aplica todas as alterações de uma migração selecionada para outra migração selecionada.
Parâmetros:
Parâmetro | Descrição |
---|---|
-From <String> |
A migração inicial. As migrações podem ser identificadas pelo nome ou pelo ID. O número 0 é um caso especial que significa antes da primeira migração. O padrão é 0. |
-To <String> |
O fim da migração. Define-se por predefinição para a última migração. |
-Idempotent |
Gere um script que pode ser usado em um banco de dados em qualquer migração. |
-NoTransactions |
Não gere instruções de transação SQL. |
-Output <String> |
O arquivo para gravar o resultado. SE esse parâmetro for omitido, o arquivo será criado com um nome gerado na mesma pasta em que os arquivos de tempo de execução do aplicativo são criados, por exemplo: /obj/Debug/netcoreapp2.1/ghbkztfz.sql/. |
Os parâmetros comuns estão listados acima.
Dica
Os parâmetros To
, From
e Output
suportam a expansão por tabulação.
O exemplo a seguir cria um script para a migração InitialCreate (de um banco de dados sem migrações), usando o nome da migração.
Script-Migration 0 InitialCreate
O exemplo a seguir cria um script para todas as migrações após a migração InitialCreate, usando a ID de migração.
Script-Migration 20180904195021_InitialCreate
Update-Database
Atualiza o banco de dados para a última migração ou para uma migração especificada.
Parâmetro | Descrição |
---|---|
-Migration <String> |
A migração-alvo. As migrações podem ser identificadas pelo nome ou pelo ID. O número 0 é um caso especial que significa antes da primeira migração e faz com que todas as migrações sejam revertidas. Se nenhuma migração for especificada, o comando assumirá como padrão a última migração. |
-Connection <String> |
A cadeia de conexão com o banco de dados. O padrão é o especificado em AddDbContext ou OnConfiguring . |
Os parâmetros comuns estão listados acima.
Dica
O parâmetro Migration
suporta expansão de tabulação.
O exemplo a seguir reverte todas as migrações.
Update-Database 0
Os exemplos a seguir atualizam o banco de dados para uma migração especificada. O primeiro usa o nome da migração e o segundo usa o ID de migração e uma conexão especificada:
Update-Database InitialCreate
Update-Database 20180904195021_InitialCreate -Connection your_connection_string