Usando Mestre-Detalhes (Eager Loading): exibindo dados relacionados em um DataGridView com Entity Framework
Que tal usar os recursos do Entity
Framework 4 em uma aplicação Windows Forms?
Suponha que você deseja criar uma
aplicação Windows Forms para exibir os
dados de duas tabelas
relacionados em um controle DataGridView usando o Entity
Framework. É um cenário clássico e, para este
exemplo, eu vou usar as tabelas Categories e Products do
banco de
dados Northwind.mdf (o nosso saco de pancadas).
Desejamos exibir em um controle
DataGridView as Categorias e, em outro DataGridView, os Produtos, de
forma que, ao selecionar uma categoria, os seus produtos
relacionados sejam exibidos no segundo DataGridView.
Eu vou usar o Visual Studio 2010
Express e criar uma aplicação Windows Forms
usando a linguagem
Visual Basic com o nome ef4_MestreDetalhes.
Em seguida, no menu Project,
clique em Add New Item e selecione o template
ADO .NET Entity Data Model e
informe o nome Northwind.edmx.
A seguir selecione a opção
Generate From DataBase e clique Next>.
Agora selecione a conexão com o
banco de dados Northwind.mdf e defina o nome da string de
conexão como NorthwindEntities e clique em Next>.

Na próxima janela, selecione as
tabelas Categories e Products, marque a opção Pluralize
or
singularize generated object names e informe o nome
NorthwindModel clicanco em Finish.
Obs: Esta opção é nova no EF 4.0 e
permite
que os nomes das entidades sejam gerados de forma mais correta.

Ao final, será gerado o modelo de
entidades mapeadas pelo Entity Framework, conforme a figura abaixo,
para as tabelas Categories e Products.

Vamos agora incluir um Data Source
no projeto no menu Data -> Add New Data Source.
Na próxima janela selecione a
opção Object.
Em expanda o namespace ef4_MestreDetalhes
e selecione o item
NorthwindEntities e clique
em Finish.

Após terminar esta etapa, selecione o
formulário padrão form1.vb na janela Solution Explorer e exiba
a janela Data Source.
Agora arraste e solte os objetos Categories e
Products para o formulário, conforme a figura abaixo.

Se você tentar rodar o projeto neste momento,
não vai obter nenhum resultado. Precisamos incluir o código que
atribui a coleção Categories à propriedade DataSource, do
controle BindingSource, tanto para Categories, como para Products.
Abra a janela de código e digite o código abaixo:
'cria uma instância do contexto<br />Private NorthwindContext As New NorthwindEntities<br /><br />Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load<br /><br /> 'O método include retorna todos os objetos Produtos relacionados a Categorias<br /> Dim dataSource = NorthwindContext.Categories.Include("Products")<br /><br /> Dim i As Integer = NorthwindContext.Categories.Count<br /><br /> 'Vamos definir a fonte de dados primária que será Categories<br /> CategoriesBindingSource.DataSource = dataSource<br /><br /> 'A fonte de dados Products atribuimos o CategoriesBindingSource control<br /> 'o qual contém tanto Categorias como Produtos<br /> ProductsBindingSource.DataSource = CategoriesBindingSource<br /><br /> 'E para exibir somente os produtos uso a propriedade DataMember<br /> ' atribuindo a ele o nome da coleção - Products<br /> ProductsBindingSource.DataMember = "Products"<br /><br /> 'permite a inclusão de novos registros<br /> ProductsBindingSource.AllowNew = True<br /><br />End SubNeste código, após criar a instância do
nosso Contexto, estamos invocando o método Include, de forma a
poder carregar os Produtos das Categorias (eager
loading).
Eager Load é o mecanismo pelo qual
uma associação, coleção ou atributo é carregado
imediatamente quando o objeto principal é carregado. (É
o
contrário do Lazy Loading).
No Entity Framework o eager load
é obtido explicitamente por meio da função Include.Se eu não usar include, os produtos não
serão carregados de imediato.
Executando o projeto, iremos obter:

Você poderá navegar pelas
Categorias, obtendo os produtos relacionados, e poderá alterar e
incluir dados diretamente no DataGridView
(pelo menos os não
relacionados).
Não é uma forma muito
aconselhável de implementar a manutenção de dados, mas é uma
opção que pode ser realizada usando o Entity Framework.
Pegue o projeto completo aqui:
ef4_MestreDetalhes.zip








