A nova versão do Visual
Studio, o Visual Studio 2010, foi lançada no final de abril e trouxe,
dentre muitas novidades, a tão esperada versão do Entity
Framework, que passou a ser identificada como Entity
Framework 4.0.
Segue abaixo um resumo das
principais novidades desta versão do Entity Framework:
- Persistence Ignorance
– A Persistence Ignorance significa que podemos definir
uma camada de domínio que contém entidades que são
independentes do mecanismo de persistência usado. O EF4
agora permite que definamos nossos próprios POCO (Plain Old CLR Object), que são desacoplados de qualquer
persistência específica (O NHibernate já oferecia
este recurso). - T4 Code Generation (Text Template Transformation ToolKit) – é um modelo
para gerar código que você pode usar no EF4. Foram incluídos diversos modelos T4 para POCO (estão
disponíveis junto à opção Add Code Generation item…). - Lazy Loading – este é o mecanismo
utilizado pelos frameworks de persistência para carregar
informações sobre demanda. Agora o EF4 dá suporte a este
recurso. Na versão anterior, você tinha que usar o
include explicitamente para realizar o lazy loading. - Model-First development
– O Model-First permite a geração do banco de dados a
partir do modelo de entidades no próprio Visual Studio.
Essas novidades
tornaram a utilização do EF4 mais fácil e
o aproximaram mais do seu concorrente mais famoso, o NHibernate.
Vejamos a seguir
quais as principais operações que são realizadas na
utilização do EF4 em uma aplicação com acesso a dados.
Criando
o modelo de entidades – Entity Data Model (EDM)
O objetivo da ADO .NET
Entity Framework é mais ambicioso: o serviço OR/M
seria apenas mais um serviço, e outros serviços como
relatórios, sincronização, backup etc também seriam
oferecidos; para cobrir todos esses serviços, foi criado um
modelo de dados que é similar ao usado no paradigma orientado a
objetos que o desenvolvedor utiliza, e também é independente de
qualquer linguagem ou plataforma.
Esse modelo de dados é conhecido
como Entity Data Model (EDM) ou modelo de
entidades de dados e pode ser considerado o coração da do Entity
Framework.
O
EDM é um modelo
entidades-relacionamentos onde:
- Entidades
– são instâncias de tipos de entidades como Clientes e
Produtos, que estão estruturados
em registros e chaves; - Relacionamentos
– são instâncias de tipos de relacionamentos
que são associações entre dois ou mais tipos
de entidades;
É a partir do modelo de
entidades que podemos escrever código usando as diferentes
APIs , como o provedor EntityClient ou o Object
Services com LINQ to Entities.
O Visual Studio oferece um
assistente para a criação do EDM a partir do
seu banco de dados ou do seu modelo de entidades.
Para criar um EDM a partir de um
banco de dados relacional, podemos usar o Visual Studio 2010, o VB 2010 Express Edition
ou o Visual C# 2010 Express Edition.
Após criar um projeto Windows
Forms, Web Application, WPF Application, etc, clique com o botão direito sobre o nome do projeto e selecione Add
-> New Item e, na janela Add New Item,
selecione Data -> ADO .NET Entity Data Model
e informe o nome Northwind.edmx, pois vamos gerar
o modelo de entidades a partir do banco de dados Northwind.mdf.

O assistente irá apresentar a tela
do Entity Data Model Wizard onde temos as
opções de gerar o modelo a partir do banco de dados ou de um
modelo vazio.
Vamos gerar o modelo a partir do
banco de dados Northwind.mdf, portanto selecione o item Generate
from database e clique em Next>.

O assistente irá apresentar a janela
para você escolher a conexão. Definindo a conexão para o Northwind.mdf,
vemos a string de conexão da entidade e nome com a qual
ela será salva no arquivo App.Config.

Na próxima janela, vamos escolher
quais tabelas do banco de dados irão fazer parte do modelo de
entidades e para as quais será gerado o mapeamento objeto
relacional.
Eu vou selecionar apenas as tabelas
Categories e Products para fica mais fácil de visualizar o
modelo.

Ao final será gerado o arquivo Northwind.edmx,
que representa o modelo de entidades. No descritor podemos ver as
entidades, o mapeamento gerado pelo EF4.


Com isso, estamos prontos para usar o
modelo de entidades gerado.
Trabalhando
com o EDM gerado
Agora que o temos o EDM gerado,
podemos acessar os dados de forma bem simples, pois o EF gerou as
entidades e todo o mapeamento com as tabelas do banco de dados, criando um contexto a partir do qual temos os métodos para
acessar, editar e excluir as informações das entidades,
persistindo-as no banco de dados.
Com isso, você não vai precisar
mais usar os objetos ADO .NET para abrir e fechar conexões, nem
acessar os dados nem comandos SQL para realizar as tarefas
básicas de manutenção de dados.
A partir deste momento, você tem
acesso ao modelo de entidades e pode realizar consultas usando o
LINQ to Entities, obtendo listas de objetos e objetos e
usando uma sintaxe bem mais próxima da linguagem de alto nível
que estamos usando.
Windows
Forms – DataBinding com exibição mestre-detalhes
Vamos realizar o databinding em um
formulário Windows Forms para uma exibição Mestre-Detalhes das
tabelas Categories e Products, visto que temos um
relacionamento um-para-muitos, onde uma categoria pode conter
muitos produtos.
Vamos usar o Visual Basic 2010 Express
Edition e criar um novo projeto
Windows Forms Application com o nome EF4_WF_DataBinding;
A seguir, clique com
o botão direito sobre o nome do projeto e
selecione Add -> New Item e, na janela Add New
Item, selecione Data -> ADO .NET Entity Data Model
e informe o nome Northwind.edmx, pois vamos gerar
o modelo de entidades a partir do banco de dados Northwind.mdf,
conforme descrito no início do artigo.
Ao final, devemos ter o formulário
form1.vb e o EDM Northwind.edmx no projeto.
Inclua dois controles no formulário
form1.vb:
- ComboBox =>
Id = cboCategorias - DataGridView
=> Id = gdvProdutos
Conforme o leiaute da figura a
seguir:

Agora vamos ao código :
No evento Load do
formulário, inclua o código que irá preencher o controle ComboBox
exibindo os nomes das categorias:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load<br /><br /> Using ctx = New <strong>NORTHWNDEntities</strong><br /> cboCategorias.<strong>DataSource</strong> = ctx.Categories.ToList()<br /> cboCategorias.<strong>ValueMember</strong> = "CategoryID"<br /> cboCategorias.<strong>DisplayMember</strong> = "CategoryName"<br /> End Using<br /><br /> End SubAgora, no evento SelectedIndexChanged,
do controle Combobox, vamos incluir o código que irá preencher o
controle DataGridView com os produtos para a
categoria selecionada.
Private Sub cboCategorias_SelectedIndexChanged(ByVal sender As<br />System.Object, ByVal e As System.EventArgs) Handles<br />cboCategorias.SelectedIndexChanged<br /> Dim iCatID As Integer = 0<br /> Try<br /><strong> If (Integer.TryParse(cboCategorias.SelectedValue.ToString(), iCatID)) Then</strong><br /> Using ctx = New NORTHWNDEntities<br /> Dim produtos = From p In ctx.Products<br /> Where p.CategoryID = iCatID<br /> Select p<br /> gdvProdutos.DataSource = produtos.ToList()<br /> End Using<br /> End If<br /> Catch ex As Exception<br /> MsgBox(" Erro " & ex.Message)<br /> End Try<br /> End SubEste código obtém o id da
categoria selecionada e define uma consulta LINQ (observe que
não estamos usando o caractere (_) para indica quebra de linha):
Dim produtos = From p In ctx.Products<br /> Where p.CategoryID = iCatID<br /> Select pExecutando o projeto iremos obter:

Simples,
simples assim…
Windows
Presentantion Foundation (WPF) – DataBinding com exibição
mestre-detalhes
Vamos agora realizar a mesma tarefa
feita acima para um projeto WPF.
Vamos continuar a usar o Visual Basic 2010 Express
Edition e criar um novo projeto
WPF Application com o nome EF4_WPF_DataBinding.
A seguir, clique com
o botão direito sobre o nome do projeto e
selecione Add -> New Item e, na janela Add New
Item, selecione Data -> ADO .NET Entity Data Model
e informe o nome Northwind.edmx, pois vamos gerar
o modelo de entidades a partir do banco de dados Northwind.mdf,
conforme descrito no início do artigo.
No descritor WPF, inclua dois
controles em MainWindow.xaml a partir da ToolBox:
- ListBox => id= ListBox1
- DataGrid => id= DataGrid1 – AutoGeneratedColumns
=> Checked (marque a caixa)
Conforme o leiaute abaixo:

Agora, no menu Data,
selecione a opção Show Data Sources.

A seguir, Arraste e solte Categories
para ListBox e Products, vinculado a
Categories, para o DataGrid.

Observe que após arrastar e soltar
os itens da fonte de dados, (Data Sources) o código XAML
é gerado automaticamente:
<Window x:Class="MainWindow"<br /> xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"<br /> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"<br /> Title="EF4 - DataBinding - Mestre Detalhes" Height="372" Width="506" mc:Ignorable="d" <br />xmlns:d=<a href="http://schemas.microsoft.com/expression/blend/2008" target="_blank" rel="noopener noreferrer">"http://schemas.microsoft.com/expression/blend/2008"</a> <br />xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:my="clr-namespace:EF4_WPF_DataBinding"><br /> <Window.Resources><br /><br /><CollectionViewSource x:Key="CategoriesViewSource"<br />d:DesignSource="{d:DesignInstance my:Categories, CreateList=True}" /><br /><br /><CollectionViewSource x:Key="CategoriesProductsViewSource"<br />Source="{Binding Path=Products, Source={StaticResource<br />CategoriesViewSource}}" /><br /> </Window.Resources><br /> <Grid DataContext="{StaticResource CategoriesViewSource}"><br /><br /><ListBox Height="91" HorizontalAlignment="Left" Margin="27,25,0,0"<br />Name="ListBox1" VerticalAlignment="Top" Width="239" <br />DisplayMemberPath="CategoryName" ItemsSource="{Binding}" SelectedValuePath="CategoryID" /><br /> <DataGrid AutoGenerateColumns="True" Height="162" HorizontalAlignment="Left" Margin="27,147,0,0" Name="DataGrid1" <br />VerticalAlignment="Top" Width="432" ItemsSource="{Binding Source={StaticResource CategoriesProductsViewSource}}" /><br /><br /><Label Content="Selecione uma Categoria" Height="28"<br />HorizontalAlignment="Left" Margin="27,0,0,0" Name="Label1"<br />VerticalAlignment="Top" /><br /> <Label Content="Produtos"<br />Height="28" HorizontalAlignment="Left" Margin="27,122,0,0"<br />Name="Label2" VerticalAlignment="Top" /><br /> </Grid><br /></Window>Executando o projeto, iremos obter:

Simples, simples assim…
Pegue os projetos completos aqui: EF4_WF_DataBinding.zip e EF4_WPF_DataBinding.zip
Eu sei, é apenas Entity
Framework 4, mas eu gosto…








