Esse artigo faz parte da revista .NET Magazine edição 54. Clique aqui para ler todos os artigos desta edição

T-FAMILY: Verdana; mso-ansi-language: PT-BR">Boas Práticas – Novidades – Web - Tutorial

ADO.NET Entity Framework

Usando o LINQ to Entities na prática

 

Neste artigo veremos

·         ADO.NET Entity Framework;

·         LINQ to Entities;

·         ASP.NET 3.5.

Qual a finalidade

·         Conhecer o ADO.NET Entity Framework na prática.

Quais situações utilizam esses recursos?

·         Aplicações Orientadas a Objetos com Acesso a Dados.

 

Resumo do DevMan

O ADO.NET Entity Framework é uma ferramenta de mapeamento objeto/relacional que usa essencialmente a linguagem LINQ para acesso aos dados. Veja neste artigo como utilizar o ADO.NET Entity Framework nas suas aplicações.

 

Recentemente na última edição da .net Magazine eu escrevi um artigo comparativo entre o NHibernate e o LINQ, mais especificamente o LINQ to Entities do ADO.NET Entity Framework.

Na ocasião, fizemos um exemplo muito simples da utilização do ADO.NET Entity Framework com relação ao NHibernate, e os resultados finais foram muito bons. O ADO.NET Entity Framework é uma ferramenta de acesso a dados que merece muito a nossa atenção.

Apesar de estar praticamente nascendo agora, a proposta do ADO.NET Entity Framework é bastante ousada, e talvez essa seja a tecnologia que deve consagrar de vez o LINQ como um novo padrão de linguagem de consulta de dados.

O ADO.NET Entity Framework oferece uma forma diferente de criar uma aplicação, focando o desenvolvimento no Modelo da Aplicação (Objetos), em vez de focar o desenvolvimento em um Modelo Relacional de armazenamento de dados.

Neste artigo o nosso objetivo será explorar mais a fundo o uso do ADO.NET Entity Framework. Para isso vamos desenvolver uma aplicação completa, do início ao fim, utilizando essa nova tecnologia da Microsoft para acesso a dados.

 

Baixando e Instalando o ADO.NET Entity Framework

O primeiro pré-requisito para a utilização do ADO.NET Entity Framework é o Visual Studio 2008. Infelizmente o ADO.NET Entity Framework não é nativo na versão 3.5 do .NET Framework. Mas ele pode ser instalado à parte.

Temos duas formas de se instalar o ADO.NET Entity Framework. Uma é pelo pacote chamado ADO.NET Entity Framework Beta 3, que pode ser baixado através do seguinte link:

http://www.microsoft.com/downloads/details.aspx?FamilyId=15DB9989-1621-444D-9B18-D1A04A21B519&displaylang=en

Ou ainda, através do Service Pack 1 do Visual Studio 2008/.NET Framework 3.5, que até o fechamento deste artigo ainda estava na sua versão Beta. Se optar por instalar a versão Beta do VS2008 acesse o seguinte link: http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx. Lembrando é claro, que é possível que o Service Pack 1 já esteja disponível em sua versão final.

Para os exemplos realizados neste artigo, foi instalado o ADO.NET Entity Framework Beta 3 em uma máquina com o Visual Studio 2008 Professional. Adicionalmente, se você optou por utilizar este pacote, também será necessário baixar e instalar o ADO.NET Entity Framework Tools Dec 07 CTP (http://www.microsoft.com/downloads/details.aspx?FamilyId=D8AE4404-8E05-41FC-94C8-C73D9E238F82&displaylang=en ).

Este pacote adicional contém as ferramentas do Visual Studio para trabalhar com o ADO.NET Entity Framework. Para ter certeza de que tudo foi instalado corretamente, e que você possui os recursos do ADO.NET Entity Framework disponíveis no Visual Studio, crie um projeto qualquer e adicione um novo item a ele. Assim como mostra a Figura 1, você deverá encontrar um template chamado ADO.NET Entity Data Model. Se este template estiver aí é porque está tudo instalado corretamente.

 

Figura 1. Verificando se o ADO.NET Entity Framework está instalado

 

Mapeamento Objeto/Relacional

Uma das principais vantagens do ADO.NET Entity Framework, que inclusive foi discutida no artigo comparativo da edição passada, é o mapeamento objeto/relacional. Ferramentas de mapeamento objeto/relacional permitem que tenhamos uma representação de dados relacionais em um modelo de objetos.

Existem muitas ferramentas e técnicas que permitem a realização desta tarefa, mas nem todas conseguem oferecer um modelo realmente orientado a objetos. A principal dificuldade de ferramentas deste tipo é a representação da Herança.

A Herança é uma possibilidade da orientação a objetos que aumenta a reusabilidade de recursos que são comuns a determinadas classes. Porém essa é uma característica do modelo de Orientação a Objetos. No modelo Relacional não temos Herança, portanto se quisermos utilizar a Herança no modelo de classes de uma aplicação que armazena dados em banco de dados relacional teremos que fazer um mapeamento objeto/relacional que consiga mapear a herança.

 

Nota do DevMan

A Herança é um princípio da Programação Orientada a Objetos que permite que as classes compartilhem atributos e operações baseados em um relacionamento, geralmente generalização. A herança permite a criação de subclasses que herdam atributos e operações da classe pai (super-classe ou classe base). A herança é um conceito aplicado no momento de criação das classes. Ela é usada na intenção de evitar que classes que possuam atributos ou métodos semelhantes sejam repetidamente criadas.

Como exemplo pode-se observar as classes 'aluno' e 'professor', onde ambas possuem atributos como nome, endereço e telefone. Nesse caso pode-se criar uma nova classe chamada, por exemplo, 'pessoa', que contenha as semelhanças entre as duas classes, fazendo com que aluno e professor herdem as características de pessoa, desta maneira pode-se dizer que aluno e professor são subclasses de pessoa.

 

A maioria das ferramentas O/RM que temos hoje nos força a primeiro criar o banco de dados, para depois criar o modelo de objeto. Isso é necessário porque para essas ferramentas é mais fácil adequar o modelo de objetos ao modelo relacional previamente desenvolvido.

Em ferramentas de O/RM mais avançadas e com poucas limitações, podemos fazer o inverso. Primeiro desenvolvemos nosso modelo de classes e depois criamos o modelo relacional, de acordo com o modelo de classes que foi definido.

A vantagem de se desenvolver primeiro o modelo de classes é que já podemos “pensar” a aplicação no modelo da orientação a objetos. Assim, podemos modelar a nossa estrutura de dados levando em conta recursos como a Herança de classes.

 

ADO.NET Entity Data Model

Sendo assim, como iremos utilizar o ADO.NET Entity Framework, vamos começar o desenvolvimento da nossa aplicação pelo modelo de classes.

Um conceito novo que o ADO.NET Entity Framework nos traz é a Entidade ou a classe EntityType. A idéia é desenvolvermos um modelo de entidades, com as ferramentas do ADO.NET Entity Framework. Com isso podemos criar nossa estrutura de dados num modelo compatível com a orientação a objetos. E posteriormente, através deste mesmo modelo de entidades seremos capazes de fazer o mapeamento objeto/relacional com o banco de dados da nossa escolha.

Sendo assim vamos começar criando o nosso modelo de entidades. A primeira coisa que você deve fazer é criar uma nova aplicação Web no seu Visual Studio 2008. Como você confere na Figura 2, basta criar uma aplicação Web usando o template do ASP.NET Web Site.

 

Figura 2. Criando novo Web Site com o ASP.NET

 

Como você pode notar foi dado o nome de CadastroEmpresas para a aplicação. A idéia neste exemplo é explorar uma modelagem orientada a objetos, que contenha herança. Uma prática pouco usada por quem está acostumado a modelar em bancos de dados relacionais.

Então vamos utilizar o exemplo de um cadastro de Empresas, onde podemos cadastrar empresas Clientes ou Fornecedores. Esse é um exemplo bastante prático e comum no nosso dia a dia.

Normalmente num cenário destes o comum é criar três tabelas, uma para cada uma destas entidades. Porém, como sabemos, estes três tipos de empresas possuem algumas características em comum, que podem ser reutilizadas em uma estrutura de herança.

Sendo assim, vamos modelar nossas entidades focando o uso da herança para reutilizarmos as características em comum. Clique com o botão direito sobre o projeto na Solution Explorer e escolha a opção Add New Item. Assim como foi mostrado na Figura 1 selecione o template ADO.NET Entity Data Model, em seguida informe DM_Empresas.edmx em Name e clique em OK para criar um modelo de entidades vazio. Irá aparecer uma mensagem avisando que o modelo será criado dentro da pasta App_Code, basta confirmar clicando em Sim. Em seguida será iniciado um Wizard, para nos ajudar na criação do nosso modelo.

A primeira tela deste Wizard, como você pode conferir na Figura 3, pergunta se queremos criar o nosso modelo baseado em um database já existente, ou se vamos criar um modelo vazio.

 

Figura 3. Criando um Modelo de Entidades vazio

 

Lembrando que o nosso objetivo é criar primeiramente um modelo de entidades, para somente depois criar o banco de dados, vamos escolher a opção Empty Model e clicar em Finish. Assim um modelo de entidades vazio será criado e aberto no Visual Studio 2008, como você pode ver na Figura 4.

 

Figura 4. Modelo de Entidades vazio

 

A Figura 4 nos mostra os elementos que compõem o modelo de entidades, e as janelas que utilizamos para criá-los e gerenciá-los. Observe que no centro temos o Entity Data Model Designer, que nada mais é do que uma área onde podemos literalmente desenhar o nosso modelo.

O modelo, por de trás dos panos, é criado todo em XML, mas graças a essa ferramenta RAD, podemos criá-lo de forma inteiramente visual. Essa é uma das grandes vantagens das ferramentas de mapeamento objeto/relacional oferecidas pela Microsoft no ADO.NET. Haja visto os DataSet Tipados e o também recente LINQ to SQL. Ambos também oferecem recursos visuais para a criação do modelo.

À esquerda na ToolBox podemos ver os itens que podem ser utilizados para a criação do modelo. Como podemos ver, os três principais componentes de um modelo de classes estão aí. O Entity, que faz o papel da classe, o Association para a criação de associações entre as classes (similar aos relacionamentos do modelo relacional), e o Inheritance, responsável por representar a herança de classes (no nosso caso de entidades).

Na parte inferior do visual Studio, abaixo do Designer, temos uma janela chamada Mapping Details. Como veremos mais adiante, esta janela é que oferece os recursos do Mapeamento Objeto/Relacional. É através dela que podemos dizer a relação que existe entre as entidades e suas propriedades com as tabelas e atributos do database.

E, ao lado direito, temos outra janela nova chamada ...

Quer ler esse conteúdo completo? Tenha acesso completo