ADO .NET Entity Framework - Usando LINQ to Entities


Em meu artigo   Apresentando LINQ to Entities dei início ao assunto LINQ to Entities, e, pelo andar da carruagem ele promete incentivar a utilização do LINQ.

A partir do service pack 1 para o VIsual Studio e para as versões Express já temos acesso ao ADO .NET Entity Framework e podemos usar os recursos LINQ to Entities.(Você também pode baixar o ADO .NET Entity Framework beta 3)

O ADO .NET Entity Framework  engloba o Entity Data Model (EDM) o Mapping Provider para o ADO .NET e LINQ to Entity (L2E); juntas essas ferramentas são usadas para realizar o mapeamento objeto relacional O/RM de uma forma mais flexível que o LINQ to SQL, pois podemos usá-las com qualquer banco de dados relacional (Ingres, Firebird, SQLite, MySQL, Oracle, etc.)  e não somente com o SQL Server. (Podemos usar outras fontes de dados também como XML)

Nota: Todo mapeamento é feito pelo "Mapping Provider" que é um provedor de acesso aos dados relacionais.

Antes de iniciar o artigo cabe mencionar que estas ferramentas ainda estão na sua versão beta e sofrerão alterações até a versão final. Desta forma eu não recomendo a sua utilização em produção.

Mas qual é a proposta do ADO .NET Entity Framework ?

Simples: A proposta do ADO .NET Entity Framework é permitir o desenvolvimento de aplicações a partir do modelo de objetos da aplicação ao invés do modo tradicional o qual é feito a partir do modelo de armazenamento de dados relacional.

Ou seja, ao invés de começar definindo banco de dados , tabelas e relacionamentos você começa definindo classes, objetos e associações com base no modelo da aplicação.

Mapeamento objeto-relacional (ou O/RM) é uma técnica de desenvolvimento utilizada para reduzir a impedância da programação orientada a objetos utilizando banco de dados relacionais . As tabelas do banco de dados são representadas através de classes e os registros de cada tabela são representados como instâncias das classes correspondentes.

Com esta técnica, o programador não precisa de se preocupar com os comandos em linguagem SQL; irá usar uma interface de programação simples que faz todo o trabalho de persistência.

Não é necessária uma correspondência direta entre as tabelas de dados e as classes do programa. A relação entre as tabelas onde originam os dados e o objeto que os disponibiliza é configurada pelo programador, isolando o código do programa das alterações à organização dos dados nas tabelas do banco de dados.

(http://pt.wikipedia.org/wiki/Mapeamento_objeto-relacional)

E como podemos usar os recursos do ADO .NET Entity Framework ?

BEm , após fazer a atualização para o service pack1 do Visual Studio ou das versões Express ou através do ADO .NET Entity beta 3; você deve verificar se o ambiente foi corretamente atualizado para poder usar o ADO .NET Entity Framework.

Para isso abra o Visual Web Developer 2008 Express Edition e crie um novo web site. A seguir no menu WebSite selecione Add New Item e em Templates localize o novo template : ADO .NET Entity Data Model. (O mesmo é valido para o Visual Studio)

Se você localizou o template já possui o ambiente preparado.

Qual o trabalho do ADO .NET Entity Framework ? O que a ferramenta faz ?

A ferramenta permite realizar o mapeamento objeto relacional tendo como ponto de partida o modelo de classes e chegando no modelo relacional conseguindo mapear inclusive a herança que é uma característica do modelo orientado a objetos.

E o que vem a ser o Entity Data Model (EDM) ?

O Entity Data Model - EDM é um modelo conceitual de dados que pode ser usado para modelar os dados de um domínio particular de forma que as aplicações podem interagir com os dados como se fossem entidades ou objetos. O conceito central no EDM são as entidades que são instâncias de tipos de entidades; Ex: Cliente, Produto, etc, as quais são registros estruturados com uma chave. Uma entidade chave é formada a partir de um subconjunto de propriedades de uma entidade tipo; Ex:  ClienteID, ProdutoID, etc. e é um conceito fundamental para identificar de forma única e assim atualizar instâncias de entidades e permitir que elas participam dos relacionamentos.

Nota:O EDM possui dois itens: Entities e Relationships: Entities  são agrupadas em Entity-Sets e Relationships são agrupadas em Relationship-Sets.

Aplicações que usam o EDM definem entidades e relacionamento no domínio da aplicação em um esquema que é usado para construir classes programáveis que são usadas pela código da aplicação. O EDM efetua a transferência dos dados em objetos para dados armazenados no banco de dados relacional e vice-versa.

Através do EDM a ADO .NET expõe as entidades como objetos no ambiente .NET o que torna a camada de objetos um destino ideal para o suporte a LINQ. É por isso que LINQ to ADO .NET inclui LINQ to Entities.

A seguir temos um desenho mostrando as camadas do EDM e o seu relacionamento :

Fig 1.0 - (fonte: http://www.code-magazine.com/Article.aspx?quickid=0711051)

Usando o ADO .NET Entity Framework e LINQ To Entities

Como é o nosso primeiro contato com o ADO .NET Entity Framework (AEF) vou trabalhar em um cenário sem muita complexidade.

Neste exemplo eu vou criar uma aplicação Windows Forms usando o Visual Basic 2008 Express Edition(SP1) usando o banco de dados Northwind.mdf. As etapas necessárias para criar a aplicação usando LINQ to Entities são:

Abra o VB 2008 Express e no menu File clique em New Project selecionando a seguir o template Windows Forms Application e informando o nome LINQ_Entities;

No menu Project escolha Add Reference a selecione o assembly System.Data.Entity clicando a seguir no botão OK;

Vamos criar agora o modelo de entidades usando o assistente Entity Data Model e referenciar o modelo no projeto.

No menu Project clique em Add New Item e em Templates selecione ADO .NET Entity Data Model e informe o nome NorthwindModel.edmx e clique em Add;

Na próxima janela do assistente selecione a opção Generate from database pois vamos gerar o modelo a partir do banco de dados Northwind e clique em Next>;

A seguir selecione a string de conexão com o banco de dados Northwind, ou , se ela não existir, clique em New Connection e crie a conexão; Aceite o valores padrão e clique em Next>;

Na última janela do assistente selecione os objetos do banco de dados e clique no botão Finish;

Ao término veremos a janela do Entity Designer que é uma ferramenta visual que permite criar e modificar visualmente entidades, associações, mapeamentos e relacionamento de herança além de poder também validar um Entity Data Model.

O Entity Designer trabalha em conjunto com o assistente Entity Data Model e o Update Model Wizard para permitir que você possa  gerar, editar e atualizar um EDM.

Entity Designer é constituído pelos seguintes componentes:

Entity Designer trabalha com um arquivo .edmx. Um arquivo .edmx é uma combinação de três arquivos de metadados EDM: (Ver Fig 1.0)

Ao executar o assistente do Entity Data Model , um arquivo .edmx é criado na solução e aberto automaticamente no Entity Designer quando o assistente termina. Você também pode abrir o arquivo .edmx clicando duas vezes sobre ele.

A seguir vamos criar a consulta LINQ e preparar a interface, no nosso caso um formulário Windows Forms, para exibir os resultados.

Usando o formulário form1.vb inclua a partir da ToolBox os seguintes componentes:

Defina o leiaute do formulário conforme a figura abaixo:

No evento Click do botão de comando Processar inclua o código abaixo:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

 

Using NwEntities As New NORTHWNDEntities()

 

   Dim Products = NwEntities.Products

   Dim crit As Integer = CType(ComboBox1.SelectedItem, Integer)

   Dim consultaProdutos = From p In Products _

                                      Where p.UnitsInStock > crit _

                                                   Select p.ProductID, p.ProductName, p.UnitsInStock, p.UnitPrice _

                                      Order by UnitsInStock

   DataGridView1.DataSource = consultaProdutos.ToList

End Using

 

End Sub

No código estamos criando uma instância do nosso modelo de entidades e obtendo a entidade Products.

A seguir obtemos o critério para filtrar a exibição dos produtos a partir do item selecionado na combobox;

Em seguida criarmos a consulta LINQ para obter os produtos com preço maior que o valor escolhido e exibimos no datagridview.

Executando o projeto e selecionando o valor 100 iremos obter  o seguinte resultado:

Até que por ser uma apresentação simples obtivemos um bom resultado mas se o ADO .NET Entity Framework quiser se impor como um framework de mapeamento OR/M e persistência ele vai ter que melhorar muito.

Como é uma versão beta e estamos apenas 'estudando' o framework não podemos dar uma palavra final, mas ele vai ter que melhorar muito o modelo de mapeamento, o quesito segurança , a gestão dos sistemas distribuídos , etc.

Enfim, cabe aguardar por mais novidades que com certeza virão na praia do ADO  .NET Entity Framework, enquanto isso vamos debulhando a ferramenta através de artigos.  Aguarde que isso é apenas o começo...

Pegue o projeto completo aqui : LINQ_Entities.zip

Eu sei é apenas .NET mas eu gosto...

Até o próximo artigo.  


José Carlos Macoratti