Como Atualizar para o Entity Framework 6
Nas versões anteriores do EF, o código foi dividido entre bibliotecas principais (principalmente System.Data.Entity.dll) enviadas como parte do .NET Framework e bibliotecas OOB (principalmente EntityFramework.dll) enviadas em um pacote NuGet. O EF6 usa o código das bibliotecas principais e o incorpora nas bibliotecas OOB. Isso era necessário para permitir que o EF fosse de software livre e que ele pudesse evoluir em um ritmo diferente do .NET Framework. A consequência disso é que os aplicativos precisarão ser recriados em relação aos tipos movidos.
Isso deve ser simples para aplicativos que fazem uso do DbContext conforme fornecido no EF 4.1 e posterior. É necessário um pouco mais de trabalho para aplicativos que fazem uso de ObjectContext, mas ainda não é difícil de fazer.
Aqui está uma lista de verificação das coisas que você precisa fazer para atualizar um aplicativo existente para o EF6.
1. Instalar o pacote NuGet do EF6
Você precisa atualizar para o novo runtime do Entity Framework 6.
- Clique com o botão direito do mouse no projeto e selecione Gerenciar Pacotes NuGet...
- Na guia Online, selecione EntityFramework e clique em Instalar
Observação
Se uma versão anterior do pacote NuGet EntityFramework tiver sido instalada, isso o atualizará para o EF6.
Como alternativa, você pode executar o comando a seguir no Console do Gerenciador de Pacotes:
Install-Package EntityFramework
2. Certifique-se de que as referências do assembly a System.Data.Entity.dll sejam removidas
A instalação do pacote NuGet EF6 deve remover automaticamente todas as referências a System.Data.Entity do seu projeto para você.
3. Trocar todos os modelos do Designer EF (EDMX) para usar a geração de código do EF 6.x
Se você tiver modelos criados com o Designer do EF, precisará atualizar os modelos de geração de código para gerar código compatível com o EF6.
Observação
Atualmente, há apenas modelos do Gerador DbContext EF 6.x disponíveis para o Visual Studio 2012 e 2013.
Exclua modelos de geração de código existentes. Esses arquivos normalmente serão nomeado comos <edmx_file_name>.tt and <edmx_file_name>.Context.tt e serão aninhados no arquivo edmx no Gerenciador de Soluções. Você pode selecionar os modelos no Gerenciador de Soluções e pressionar a teclaDelete para excluí-los.
Observação
Em projetos do Site, os modelos não serão aninhados em seu arquivo edmx, mas listados junto com ele no Gerenciador de Soluções.
Observação
Em projetos VB.NET, você precisará habilitar "Mostrar Todos os Arquivos" para poder ver os arquivos de modelo aninhados.
Adicione o modelo de geração de código EF 6.x apropriado. Abra seu modelo no Designer do EF, clique com o botão direito do mouse na superfície de criação e selecione Adicionar Item de Geração de Código...
Se você estiver usando a API DbContext (recomendada), o Gerador de DbContext do EF 6.x estará disponível na guia Dados.
Observação
Se você estiver usando o Visual Studio 2012, precisará instalar as Ferramentas do EF 6 para ter esse modelo. Consulte Get Entity Framework para obter detalhes.
Se você estiver usando a API ObjectContext, precisará selecionar a guia Online e procurar o Gerador do EntityObject EF 6.x.
Se você aplicou as personalizações aos modelos de geração de código, precisará aplicá-las novamente aos modelos atualizados.
4. Atualizar namespaces para todos os tipos do EF Core que estão sendo usados
Os namespaces dos tipos DbContext e Code First não foram alterados. Isso significa que para muitos aplicativos que usam o EF 4.1 ou posterior, você não precisará alterar nada.
Tipos como ObjectContext que estavam anteriormente em System.Data.Entity.dll foram movidos para novos namespaces. Isso significa que talvez seja necessário atualizar suas diretivas de uso ou importação para criar no EF6.
A regra geral para alterações de namespace é que qualquer tipo em System.Data.* é movido para System.Data.Entity.Core.*. Em outras palavras, basta inserir Entity.Core. após System.Data. Por exemplo:
- System.Data.EntityException => System.Data.Entity.Core. Entityexception
- System.Data.Objects.ObjectContext => System.Data.Entity.Core. Objects.ObjectContext
- System.Data.Objects.DataClasses.RelationshipManager => System.Data.Entity.Core. Objects.DataClasses.RelationshipManager
Esses tipos estão nos namespaces Principais porque não são usados diretamente para a maioria dos aplicativos baseados em DbContext. Alguns tipos que faziam parte do System.Data.Entity.dll ainda são usados normalmente e diretamente para aplicativos baseados em DbContext e, portanto, não foram movidos para os namespaces Principais. Eles são:
- System.Data.EntityState => System.Data.Entidade. Entitystate
- System.Data.Objects.DataClasses.EdmFunctionAttribute => System.Data.Entity.DbFunctionAttribute
Observação
Essa classe foi renomeada. Uma classe com o nome antigo ainda existe e funciona, mas agora está marcada como obsoleta.
- System.Data.Objects.EntityFunctions => System.Data.Entity.DbFunctions
Observação
Essa classe foi renomeada. Uma classe com o nome antigo ainda existe e funciona, mas agora está marcada como obsoleta.)
- Classes espaciais (por exemplo, DbGeography, DbGeometry) foram movidas de System.Data.Spatial => System.Data.Entity.Spatial
Observação
Alguns tipos no namespace System.Data estão em System.Data.dll, que não é um assembly do EF. Esses tipos não foram movidos e, portanto, seus namespaces permanecem inalterados.