Portabilidade de um modelo baseado em código do EF6 para o EF Core
Se você leu todas as advertências e está pronto para fazer a portabilidade, aqui estão algumas diretrizes para ajudá-lo a começar.
Instalar pacotes NuGet do EF Core
Para usar o EF Core, instale o pacote NuGet do provedor de banco de dados que você deseja usar. Por exemplo, quando o SQL Server é o destino, você deve instalar Microsoft.EntityFrameworkCore.SqlServer
. Consulte Provedores de banco de dados para obter detalhes.
Se você estiver planejando usar migrações, instale também o pacote Microsoft.EntityFrameworkCore.Tools
.
É bom deixar o pacote NuGet do EF6 (EntityFramework) instalado, pois o EF Core e o EF6 podem ser usados lado a lado no mesmo aplicativo. No entanto, se você não pretende usar o EF6 em nenhuma área do aplicativo, desinstalar o pacote ajudará a fornecer erros de compilação em partes de código que precisam de atenção.
Trocar namespaces
A maioria das APIs que você usa no EF6 estão no namespace System.Data.Entity
(e namespaces secundários relacionados). A primeira alteração de código é trocar para o namespace Microsoft.EntityFrameworkCore
. Normalmente, você começa com o arquivo de código de contexto derivado e, em seguida, trabalha a partir daí, resolvendo erros de compilação à medida que eles ocorrem.
Configuração de contexto (conexão, etc.)
Conforme descrito em configurando a conexão de banco de dados, o EF Core tem menos segredos em relação à detecção do banco de dados ao qual se conectar. Você precisará substituir o método OnConfiguring
em seu contexto derivado e usar a API específica do provedor de banco de dados para configurar a conexão com o banco de dados.
A maioria dos aplicativos EF6 armazena a cadeia de conexão no arquivo de aplicativos App/Web.config
. No EF Core, você lê essa cadeia de conexão usando a API ConfigurationManager
. Talvez seja necessário adicionar uma referência ao assembly da System.Configuration
estrutura para poder usar esta API:
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["BloggingDatabase"].ConnectionString);
}
}
Aviso Nunca armazene senhas ou outros dados confidenciais no código-fonte ou nos arquivos de configuração. Os segredos de produção não devem ser usados para desenvolvimento ou teste. Os segredos não devem ser implantados com o aplicativo. Os segredos de produção devem ser acessados por meios controlados, como o Azure Key Vault. Os segredos de teste e produção do Azure podem ser armazenados e protegidos com o provedor de configuração do Azure Key Vault.
Atualizar o código
Nesse ponto, é uma questão de abordar erros de compilação e examinar o código para ver se as alterações de comportamento afetarão você.
Migrações existentes
Não há uma maneira viável de fazer a portabilidade de migrações existentes do EF6 para o EF Core.
Se possível, é melhor pressupor que todas as migrações anteriores do EF6 foram aplicadas ao banco de dados e, em seguida, começar a migrar o esquema a partir desse ponto usando o EF Core. Para fazer isso, use o comando Add-Migration
para adicionar uma migração depois que o modelo for portado para o EF Core. Em seguida, remova todo o código dos métodos Up
e Down
da migração com scaffolding. As migrações subsequentes serão comparadas com o modelo quando o scaffolding foi aplicado à migração inicial.
Testar a portabilidade
Só porque seu aplicativo é compilado, não significa que ele foi portado com êxito para o EF Core. Você precisará testar todas as áreas do aplicativo para garantir que nenhuma das alterações de comportamento afetou negativamente seu aplicativo.
Por fim, examine os casos detalhados a serem considerados ao fazer a portabilidade para obter mais conselhos sobre casos e cenários específicos em seu código.