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.