Comparar EF Core e EF6

EF Core

O Entity Framework Core (EF Core) é um mapeador de banco de dados de objetos moderno para .NET. Ele dá suporte a consultas LINQ, controle de alterações, atualizações e migrações de esquema.

O EF Core funciona com SQL Server/Banco de Dados SQL do Azure, SQLite, Azure Cosmos DB, MySQL, PostgreSQL e muitos outros bancos de dados por meio de um modelo de plug-in do provedor de banco de dados.

EF6

O Entity Framework 6 (EF6) é um mapeador relacional de objeto projetado para .NET Framework, mas com suporte para .NET Core. O EF6 é um produto estável e com suporte, mas não está mais sendo desenvolvido ativamente.

Comparação de recursos

O EF Core oferece novos recursos que não serão implementados no EF6. No entanto, nem todos os recursos do EF6 estão atualmente implementados no EF Core.

As tabelas a seguir comparam os recursos disponíveis no EF Core e no EF6. Trata-se de uma comparação de alto nível e não lista todos os recursos nem explica as diferenças entre o mesmo recurso em diferentes versões do EF.

A coluna EF Core indica a versão do produto na qual o recurso apareceu pela primeira vez.

Criar um modelo

Recurso EF6.4 EF Core
Mapeamento de classe básico Sim 1.0
Construtores com parâmetros 2.1
Conversões de valor da propriedade 2.1
Tipos mapeados sem chaves 2.1
Convenções Sim 1.0
Convenções personalizadas Sim 7.0
Anotações de dados Sim 1.0
API fluente Sim 1.0
Herança: Tabela por hierarquia (TPH) Sim 1.0
Herança: Tabela por tipo (TPT) Sim 5,0
Herança: Tabela por classe concreta (TPC) Sim 7.0
Propriedades de estado sombra 1.0
Chaves alternativas 1.0
Navegações muitos para muitos Sim 5,0
Muitos para muitos sem entidade de ingresso Sim 5,0
Geração de chaves: Banco de dados Sim 1.0
Geração de chaves: Cliente 1.0
Tipos complexos/de propriedade Sim 2,0
Dados espaciais Sim 2.2
Formato de modelo: Código Sim 1.0
Criar um modelo do banco de dados: Linha de comando Sim 1.0
Atualizar modelo do banco de dados Parcial Na lista de pendências (#831)
Filtros de consulta global 2,0
Divisão de tabela Sim 2,0
Divisão de entidade Sim 7.0
Mapeamento de função escalar do banco de dados Pobre 2,0
Mapeamento de função com valor de tabela de banco de dados Pobre 5.0
Mapeamento de campos 1,1
Tipos de referência anuláveis (C# 8.0) 3,0
Visualização gráfica do modelo Sim Não há suporte planejado (1)
Editor de gráfico de modelo Sim Não há suporte planejado (1)
Formato de modelo: EDMX (XML) Sim Não há suporte planejado (1)
Criar um modelo do banco de dados: Assistente de VS Sim Não há suporte planejado (1)

Consultando dados

Recurso EF6.4 EF Core
Consultas LINQ Sim 1.0
SQL gerado legível Pobre 1.0
Conversão de GroupBy Sim 2.1
Carregamento de dados relacionados: Eager Sim 1.0
Carregamento de dados relacionados: carregamento adiantado de tipos derivados 2.1
Carregamento de dados relacionados: Lazy Sim 2.1
Carregamento de dados relacionados: Explicit Sim 1,1
Consultas SQL brutas: tipos de entidade Sim 1.0
Consultas SQL brutas: tipos de entidade sem chave Sim 2.1
Consultas SQL brutas: Composição com LINQ 1.0
Consultas explicitamente compiladas Pobre 2,0
await foreach (C# 8.0) 3,0
Linguagem de consulta baseada em texto (Entity SQL) Sim Não há suporte planejado (1)

Salvando dados

Recurso EF6.4 EF Core
Controle de alterações: Instantâneo Sim 1.0
Controle de alterações: Notificação Sim 1.0
Controle de alterações: Proxies Sim 5,0
Acesso ao estado controlado Sim 1.0
Simultaneidade otimista Sim 1.0
Transactions Sim 1.0
Envio em lote de instruções 1.0
Mapeamento de procedimento armazenado Sim 7.0
APIs de baixo nível de grafo desconectado Pobre 1.0
Gráfico desconectado ponta a ponta 1.0 (parcial; #5536)

Outros recursos

Recurso EF6.4 EF Core
Migrações Sim 1.0
APIs de criação/exclusão de banco de dados Sim 1.0
Dados de propagação Sim 2.1
Resiliência de conexão Sim 1,1
Interceptores Sim 3.0
Eventos Sim 3.0 (parcial; #626)
Registro em log simples (Database.Log) Sim 5,0
Pool de DbContext 2,0

Provedores de banco de dados (2)

Recurso EF6.4 EF Core
SQL Server Sim 1.0
MySQL Sim 1.0
PostgreSQL Sim 1.0
Oracle Sim 1.0
SQLite Sim 1.0
SQL Server Compact Sim 1.0 (3)
DB2 Sim 1.0
Firebird Sim 2,0
Jet (Microsoft Access) 2.0 (3)
Azure Cosmos DB 3,0
Na memória (para teste) 1.0

1 Alguns recursos do EF6 não serão implementados no EF Core. Esses recursos dependem do EDM (Modelo de Dados de Entidade) subjacente do EF6 e/ou são recursos complexos com retorno sobre o investimento relativamente baixo. Sempre agradecemos os comentários, mas embora o EF Core permita muitas tarefas que não são possíveis no EF6, não é possível para o EF Core dar suporte a todos os recursos do EF6.

2 Os provedores de banco de dados do EF Core implementados por terceiros podem ter atraso na atualização para novas versões principais do EF Core. Confira Provedores de banco de dados para obter mais informações.

3 Os provedores do SQL Server Compact e do Jet só funcionam no .NET Framework (não no .NET Core).

Plataformas com Suporte

O EF Core 3.1 é executado no .NET Core e .NET Framework, por meio do uso do .NET Standard 2.0. No entanto, o EF Core 5.0 não executa no .NET Framework. Consulte Plataformas para obter mais detalhes.

O EF 6.4 é executado no .NET Core e .NET Framework, por meio de vários destinos.

Orientação para novos aplicativos

Use o EF Core no .NET Core para todos os novos aplicativos, a menos que o aplicativo precise de algo que seja compatível apenas no .NET Framework.

Orientação para aplicativos EF6 existentes

O EF Core não é uma substituição solta para o EF6. A mudança de EF6 para EF Core provavelmente exigirá alterações no seu aplicativo.

Ao mover um aplicativo EF6 para o .NET Core:

  • Continue usando o EF6 se o código de acesso a dados estiver estável e provavelmente não evoluir nem precisar de novos recursos.
  • Passe para o EF Core se o código de acesso a dados estiver em evolução ou se o aplicativo precisar de novos recursos disponíveis somente no EF Core.
  • A portabilidade para o EF Core também é realizada com frequência para ter desempenho. No entanto, nem todos os cenários são mais rápidos, portanto, faça alguma criação de perfil primeiro.

Para saber mais, confira Portabilidade do EF6 para o EF Core.