Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O Entity Framework Core, ou EF Core para abreviar, é uma reescrita total do Entity Framework para arquiteturas de aplicativos modernas. Devido a mudanças fundamentais, não há um caminho de atualização direta. O objetivo desta documentação é fornecer um guia completo para portar seus aplicativos EF6 para o EF Core.
Importante
Antes de iniciar o processo de portabilidade, é importante validar se o EF Core atende aos requisitos de acesso a dados para seu aplicativo. Você pode encontrar tudo o que precisa na documentação do EF Core.
Advertência
O EF Core suporta apenas o .NET moderno e não suporta o .NET Framework. Como tal, se o seu projeto ainda estiver direcionado para o .NET Framework, você terá que migrar para o .NET moderno antes de iniciar a migração do EF6 para o EF Core. Observe que o EF6 oferece suporte ao .NET moderno, portanto, você pode migrar para o .NET moderno primeiro, mantendo o EF6 e, em seguida, lidar com a migração do EF6 para o EF Core.
Razões para atualizar
Todo o desenvolvimento do novo Entity Framework está acontecendo no EF Core. Não há planos para transferir novas funcionalidades para o Entity Framework 6. O EF Core é executado nos tempos de execução mais recentes do .NET e aproveita ao máximo o tempo de execução, recursos específicos da plataforma (como ASP.NET Core ou WPF) e recursos específicos da linguagem. Aqui estão alguns dos benefícios que você ganha com a atualização:
- Aproveite as melhorias de desempenho contínuas no EF Core. Por exemplo, um cliente que migrou do EF6 para o EF Core 6 observou uma redução de 40 vezes na frequência de uso de uma consulta pesada devido à funcionalidade de divisão de consultas. Muitos clientes relatam enormes ganhos de desempenho simplesmente mudando para o EF Core mais recente.
- Use novos recursos no EF Core. Não haverá novos recursos adicionados ao EF6. Todas as novas funcionalidades, por exemplo o provedor do Azure Cosmos DB e
DbContextFactory, só serão adicionadas ao EF Core. Para obter uma comparação completa do EF6 com o EF Core, incluindo vários recursos exclusivos do EF Core, consulte: Compare EF Core & EF6. - Modernize o seu stack de aplicações através da injeção de dependências e integre suavemente o acesso aos dados com tecnologias como gRPC e GraphQL.
Nota sobre migrações
Esta documentação utiliza os termos port e upgrade para evitar confusão com o termo migrações, uma funcionalidade do EF Core. As migrações no EF Core não são compatíveis com as migrações do EF6 Code First devido a melhorias significativas na forma como as migrações são tratadas. Não há uma abordagem recomendada para portar seu histórico de migrações, portanto, planeje começar "novo" no EF Core. Você pode manter a base de código e os dados de suas migrações EF6. Aplique sua migração final no EF6 e, em seguida, crie uma migração inicial no EF Core. Você poderá acompanhar o histórico no EF Core daqui para frente.
Etapas de atualização
O caminho de atualização foi dividido em vários documentos organizados pela fase da atualização e pelo tipo de aplicativo.
Determine o "sabor" do seu EF Core
Há várias abordagens para como o EF Core funciona com seu modelo de domínio e implementação de banco de dados. Em geral, a maioria dos aplicativos seguirá um desses padrões e a forma como você aborda sua porta dependerá do "sabor" do aplicativo.
O código como fonte da verdade é uma abordagem na qual tudo é modelado através de código e classes, seja através de atributos de dados, configuração fluente ou uma combinação de ambos. O banco de dados é gerado inicialmente com base no modelo definido no EF Core e outras atualizações geralmente são tratadas por meio de migrações. Isso é muitas vezes chamado de "código primeiro", mas o nome não é totalmente preciso porque uma abordagem é começar com um banco de dados existente, gerar suas entidades e, em seguida, mantê-las com código posteriormente.
O banco de dados como fonte de verdade envolve a engenharia reversa ou a geração do seu código a partir do banco de dados. Quando as alterações de esquema são feitas, o código é regenerado ou atualizado para refletir as alterações. Isso é frequentemente chamado de "banco de dados primeiro".
Finalmente, uma abordagem de mapeamento híbrido mais avançada segue a filosofia de que o código e o banco de dados são gerenciados separadamente, e o EF Core é usado para mapear entre os dois. Essa abordagem normalmente evita migrações.
A tabela a seguir resume algumas diferenças de alto nível:
| Abordagem | Função de desenvolvedor | Função DBA | Migrações | Andaimes | Repositório |
|---|---|---|---|---|---|
| Código primeiro | Projetar entidades e verificar/personalizar migrações geradas | Verificar definições e alterações de esquema | Por compromisso | N/A | Rastrear entidades, DbContext e migrações |
| Banco de dados primeiro | Engenharia reversa após alterações e verificação de entidades geradas | Informar os desenvolvedores quando a base de dados for modificada para recriar a estrutura usada. | N/A | Por alteração de esquema | Controlar extensões/classes parciais que estendem as entidades geradas |
| Híbrido | Atualize a configuração fluente para mapear sempre que as entidades ou o banco de dados forem alterados | Informar os desenvolvedores quando o banco de dados for alterado para que eles possam atualizar as entidades e a configuração do modelo | N/A | N/A | Acompanhar entidades e DbContext |
A abordagem híbrida é uma abordagem mais avançada com sobrecarga adicional em comparação com as abordagens tradicionais de código e banco de dados.
Compreender o impacto de se afastar do EDMX
O EF6 suportava um formato de definição de modelo especial chamado Entity Data Model XML (EDMX). Os arquivos EDMX contêm várias definições, incluindo definições de esquema conceitual (CSDL), especificações de mapeamento (MSL) e definições de esquema de armazenamento (SSDL). O EF Core rastreia os esquemas de domínio, mapeamento e banco de dados por meio de gráficos de modelo interno e não suporta o formato EDMX. Muitas postagens de blog e artigos afirmam erroneamente que isso significa que o EF Core suporta apenas "código primeiro". O EF Core suporta todos os três modelos de aplicativos descritos na seção anterior. Você pode reconstruir o modelo no EF Core fazendo engenharia reversa do banco de dados. Se você usar EDMX para uma representação visual do seu modelo de entidade, considere usar o EF Core Power Tools de código aberto que fornece recursos semelhantes para o EF Core.
Para obter mais informações sobre o impacto da falta de suporte para arquivos EDMX, leia o guia porting EDMX.
Realize as etapas de atualização
Não é um requisito portar toda a aplicação. O EF6 e o EF Core podem ser executados no mesmo aplicativo (consulte: usando o EF Core e o EF6 no mesmo aplicativo). Para minimizar o risco, você pode considerar:
- Mude para o EF6 no .NET Core se ainda não o fez.
- Migre uma pequena parte do seu aplicativo para o EF Core e execute-o lado a lado com o EF6.
- Por fim, traga o restante da base de código para o EF Core e desative o código EF6.
Quanto ao porto em si, de uma forma geral, irá:
- Analise as alterações de comportamento entre o EF6 e o EF Core.
- Execute suas migrações finais, se houver, no EF6.
- Crie seu projeto EF Core.
- Copie o código para o novo projeto, execute engenharia reversa ou uma combinação de ambos.
- Renomeie referências e entidades e atualize comportamentos:
-
System.Data.EntityaMicrosoft.EntityFrameworkCore - Alterar
DbContextconstrutor para consumir opções e/ou substituirOnConfiguring -
DbModelBuilderaModelBuilder - Renomear
DbEntityEntry<T>paraEntityEntry<T> - Mover de
Database.Logpara APIs avançadasMicrosoft.Extensions.Loggingou simplesDbContextOptionsBuilder.LogTo - Aplicar alterações para
WithRequiredeWithOptional(veja aqui) - Atualizar o código de validação. Não há validação de dados incorporada ao EF Core, mas você mesmo pode fazê-lo.
- Siga todas as etapas necessárias para portar a partir do EDMX.
-
- Execute etapas específicas com base na sua abordagem EF Core:
Há muitas considerações relacionadas a todas as abordagens, portanto, você também desejará analisar maneiras de abordar e contornar as diferenças detalhadas entre o EF6 e o EF Core.