O Entity Framework vai realmente ar um salto da versão 1.0, criada junto com o framework .NET 3.5, para a versão 4.0, disponibilizada em conjunto com o framework .NET 4.0, de forma que sua numeração de versão passe a acompanhar o framework .NET
O desenvolvimento, porém, não está acompanhando por completo os betas do Visual Studio 2010 : Para o VS 2010 beta 1 deve-se instalar o EF CTP Features 1, para o VS 2010 beta 2 deve-se instalar o EF CTP Features 2 e ainda assim temos alguma decepção porque o CTP Features 2 sumiu com alguns recursos do CTP Features 1, recursos estes que estão sendo prometidos para um próximo CTP (Confuso, não ?)
Bem, sabendo-se que é necessário instalar um dos betas com o CTP Features certo, vamos as novidades :
Geração de banco a partir do modelo
No EF 1.0 não era possível fazer isso, apenas era possível gerar o modelo a partir do banco, mas não o banco a partir do modelo.
Agora não só podemos fazer isso como o sistema de erros do EF está muito mais amigável, não gerando uma mensagem de erro para cada elemento do modelo que não encontra-se mapeado.
O Entity Framework Supported Mapping Scenarios White Paper já é um excelente guia para a montagem dos modelos EF desde o surgimento do Entity Framework.
Conforme este white paper demonstra, existe várias formas diferentes de fazer um mapeamento, tal como TPT, TPH e o TPE. Já que existem diversas formas, qual forma está sendo utilizada quando geramos o banco a partir do modelo ? É a melhor forma ?
Eis a resposta :
Por default é utilizado o mapeamento TPT – Table per Type, o que implica em um modelo T4 padrão para o TPT. No VS beta 2 ainda não existem opções para personalizar isso (não em design) mas a propriedade está ali, disponível, não há dúvidas de que na versão final poderemos escolher o tipo de geração que desejaremos para o banco de dados.
Para quem não está familiarizado : T4 é um formato de modelos que nos permite definir como a geração de código será feita. Utilizando um modelo T4 estamos definindo como desejamos que o VS faça uma determinada geração de código
No momento o template utilizado é específico para o SQL Server, mas a idéia é que templates de geração DDL para outros bancos possam ser adicionados e selecionados pelo usuário, permitindo a geração do modelo em qualquer banco.
Veja mais detalhes sobre o generation workflow e o template T4 em http://blogs.msdn.com/adonet/archive/2009/11/05/model-first-with-the-entity-framework-4.aspx
Lazy Load
Na versão 1.0 do EF era necessário carregar as entidades com o método Load ou utilizar Include em uma query linq. Com o EF 4 ganhamos o Lazy Load, as entidades são carregadas automaticamente quando nos referimos ao seu nome.
Por um lado é comodo, por outro é ruim pois programadores novatos perderão a noção das querys que estão provocando na base de dados.
POCO
POCO é a sigla de Plain Old CLR Object. Neste contexto, POCO significa minimizar as classes geradas para que tenham o mínimo de código.
O EF 4.0 suporta POCO de forma extremamente simples : Basta desligar a geração de código e codificar você mesmo as classes do modelo do EF.
Muitos com certeza vão amar este recurso, mas é preciso olhar nas entrelinhas : O código gerado por padrão é maior porque contém mais funcionalidades, como por exemplo, estar pronto para a implementação de regras de negócio na partial class.
O código POCO apenas será menor quando se deixa de implementar alguma funcionalidade das classes do EF. Isso poderá gerar uma série de problemas entre desenvolvedores iniciantes e amantes da criação de tudo em código.
T4 com POCO
O EF 4.0 utiliza amplamente os modelos T4 e de forma simples : ao invés de desligarmos a geração de código, podemos clicar com o botão direito no modelo e escolher um modelo T4 que será utilizado para a geração do código !
O Visual Studio em si vem apenas com o modelo T4 padrão do Entity Framework. O features CTP 2 adiciona mais um modelo T4, que permite fazer uma geração POCO, porém um pouco mais avançada, em que cada entidade de um modelo do entity framework irá fazer o controle de seu próprio estado, ao invés de depender do objectStateManager.
Essa questão das entidades fazerem o controle de seu próprio estado facilita muito a tranferência de coleções das entidades entre camadas sem que o contexto tenha que estar disponível nas múltiplas camadas da aplicação.
A possibilidade de escolha de um modelo T4 de forma tão simples é um grande avanço, porém adicione a isso o fato de que, uma vez escolhido, o modelo T4 (arquivo .tt) é adicionado ao projeto, permitindo que você altere o modelo T4 livremente, personalizando a geração de código do EF.
Existe um modelo T4 para uma geração POCO, mas ele foi criado apenas no features CTP 1, que é instalado sobre o VS 2010 beta 1, sumiu no features CTP 2, espera-se que seja adicionado novamente em um próximo CTP.
Melhor geração do SQL
O SQL gerado pelo Entity Framework ficou muito mais limpo e amigável com índices, a diferença entre o EF 1 e o EF 4 é gritante
Chave estrangeira no modelo
Com a chave estrangeira dos relacionamentos fazendo parte do modelo, várias tarefas de relacionamento master/detail se tornaram mais simples, dispensando a navegação para se descobrir a chave.
Integração com WPF
Criar uma aplicação WPF com acesso a dados de um modelo do EF passou a ser simples questão de drag-and-drop, o código é gerado automaticamente
Mapeamento de procedures para complex types
O modelo do EF agora suporta complex types, o que por si só já é muito bom. Além disso, é possível mapear o retorno de stored procedures para complex types de uma forma extremamente simples.
Além da nova simplicidade, outra questão a destacar é que essa possibilidade nos permite trazer uma mesma tabela do banco (“funcionarios”, por exemplo) com vários conjuntos de campos diferentes (uma espécie de views da tabela), porém apenas a entidade que representa a tabela de forma mais completa permitirá gravação de dados, as demais ficam sendo read/only.
Acesso a functions
Utilizando atributos do EF é possível mapear uma rotina de código com uma function na base de dados e desta forma, ao utilizar a rotina em uma query linqToEntities o SQL gerado fará a chamada da function
Criação do banco por código
Existem classes no EF que permitem não apenas que todo o modelo seja definido por código mas também que a base de dados seja criada a partir do código, de acordo com o padrão de geração do banco a partir do modelo
Testabilidade
Foi demonstrada a possibilidade de realizar testes no modelo do EF de forma independente do banco de dados. Baseia-se no seguinte : A aplicação, ao invés de chamar diretamente o modelo do EF, chama uma classe de repositório que pode conter o modelo do EF.
O modelo contido no repositório é baseado em uma interface. Podemos então utilizar os recursos do T4 para fazer com que o modelo gerado pelo EF implemente esta interface.
Com os recursos de POCO, podemos criar um modelo “dummy” e preencher o repositório com este modelo “dummy”, que não vai ao banco, para que sejam realizados os testes de forma isolada do banco.
>> Não acabou não, mané, tem mais ai, clica e contine lendo ...<<