Compartilhar via


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.