Entity Framework 4.1 - Criando um Modelo e usando em múltiplos projetos


 

Que tal criar um modelo de entidades usando o Entity Framework de forma que possamos usar o modelo em diversos projetos ?

 

A idéia é bem simples...

 

Vamos criar um Entity Data Mode (EDM) e vamos gerar um arquivo .dll de forma que ele possa ser referenciado em qualquer outro projeto que queiramos usar.

 

O EDM é um modelo entidades-relacionamentos onde :
  • Entidades - são instâncias de tipos de entidades como Clientes, Produtos os quais estão estruturados em registros e chaves;
  • Relacionamentos - são instâncias de tipos de relacionamentos que são associações entre duas 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.

 

Tudo isso graças aos recursos do Entity Framework 4.1
 

Esta é o um artigo que trata dos recursos do Entity Framework 4.1 dirigido para os iniciantes que estão tendo o seu primeiro contato com esta tecnologia.
 

O Entity Framework é uma ferramenta OR/M que realiza o mapeamento objeto relacional gerando entidades e mapeando-as para as tabelas do banco de dados.. Em sua primeira versão, praticamente não havia o que é conhecido como Code-First(Código Primeiro), ou seja, a possibilidade de gerar o modelo de negócios e suas entidades sem ter que primeiro criar o banco de dados.


Recursos usados

Eu vou usar os seguintes recursos:

  1. Visual Basic 2010 Express Edition
  2. Linguagem Visual Basic .NET
  3. Versão 4.1 do Entity Framework

Obs: Você deve ter o SQL Server 2008 Express Edition instalado

Objetivos

Criar um modelo de entidades no formato de uma arquivo .dll para depois  usá-lo em um projeto distinto.

Criando o Modelo de entidade como uma library (.dll)

Abra o Visual Basic 2010 Express Edition (a versão gratuita do VB .NET) e no menu File selecione New Project;

A seguir escolha o modelo Class Library , informe o nome MacorattiModeloEntidades e clique em OK;

Será criado um projeto do tipo Class Library contendo o arquivo Class1.vb. Podemos excluir este arquivo do projeto.

A seguir no menu Project clique em Add New Item e a seguir selecione o template ADO .NET Entity Data Model;

Informe o nome Northwind.edmx pois eu vou usar o banco de dados Northwind.mdf para gerar o modelo de entidades mas se desejar usar outro nome e outro banco de dados fique a vontade.

Clique no botão Add;

Na janela do Assistente selecione a opção - Generate from Database - e clique em Next>;

A seguir selecione a conexão com banco de dados Northwind (se ela não existir clique em New Connection e crie uma conexão);

Aceite o nome padrão da entity connection e clique no botão Next>;

A seguir selecione as tabelas Customers e Orders e as stored procedures CustOrdersDetail e CustOrdersOrders e marque as opções conforme a figura abaixo:

Para terminar clique em Finish;

O seu projeto deverá conter a seguinte estrutura:

Neste momento já podemos dar um Build no projeto no modo Release. O padrão é Debug e para alterar clique sobre o projeto e selecione Properties e a seguir a guia Build e altere para Release.

Após a compilação se você abrir a pasta Release irá encontrar o arquivo MacorattiModeloEntidade.dll.

Pronto ! Já temos o que queremos ; o arquivo .dll para usar em outros projetos.

Selecione o modelo na janela Solution Explorer e na janela de propriedades verifique a propriedade Metadata Artifact Processing:

Observe que a opção padrão é Embed in Output Assembly;

Esta propriedade é muito útil em cenários onde você quer usar o usar o modelo em diferentes projetos visto que o modelo é criado como um projeto de biblioteca de classe (.dll), e tudo que você precisa fazer agora é fazer uma referência a este assembly dll em seu projeto e fornecer a seqüência de conexão.

O projeto que utiliza o modelo, encontra os arquivos de esquema (. CSDL,. Mls,. Ssdl) através da propriedade metadados. Lembre-se que todos os arquivos de esquema são incorporados à dll. Abra o arquivo app.config e verifique a entrada da seqüência de conexão que contém os arquivos de esquema de entradas:

Entity Data Model é um conceito e o Entity Framework possui uma implementação particular deste modelo que é percebida como um arquivo EDMX em tempo de desenvolvimento. Em tempo de execução o arquivo EDMX é tratado em três arquivos XML separados cada um com um papel definido:

Abaixo temos uma figura que mostra cada um destes arquivos que representam o arquivo .edmx:

Usando a library .dll em outro projeto

Agora é a hora da verdade. Vamos criar um novo projeto e referenciar o arquivo MacorattiModeloEntidades.dll criado para podermos usar o modelo de entidades gerado para as tabelas Customer e Orders do banco de dados Northwind.mdf

Abra o Visual C# 2010 Express Edition e crie um novo projeto do tipo WIndows Application com o nome UsandoModeloEntidadesMacoratti;

A primeira coisa que vamos fazer é referenciar o arquivo MacorattiModeloEntidades.dll;

Clique com o botão direito sobre o projeto e selecione Add Reference;

A seguir clique na guia Browse (ou Project) e localize o arquivo  MacorattiModeloEntidades.dll, selecionando-o e clique em OK;

Repita o procedimento acima e inclua uma referência a System.Data.Entity no projeto:

Para encerrar, o nosso projeto Windows Forms precisa ter as informações sobre a seqüência de conexão que contém os metadados e os detalhes da conexão com o banco de dados.  Se você pular essa etapa e consultar diretamente o modelo, você obterá um erro A conexão especificada ou não será encontrado na configuração, ou não será usada com o provedor EntityClient, ou não será válida.

Vamos então criar um arquivo de configuração e adicionar nela a string de conexão do modelo ou se você quiser basta copiar o arquivo app.config que criamos anteriormente neste projeto. O arquivo deverá conter o seguinte conteúdo:

<?xml version="1.0" encoding="utf-8"?>

<configuration>

<connectionStrings>

<add name="NorthwindEntities"

connectionString="metadata=res://*/Northwind.csdl|res://*/Northwind.ssdl|res://*/Northwind.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLEXPRESS;initial catalog=Northwind;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;"

providerName="System.Data.EntityClient" />

</connectionStrings>

</configuration>

Agora é só alegria...

Vamos definir um leiaute no formulário form1.cs do nosso projeto incluindo um ListBox, um DataGridView e dois controles Buttons conforme a figura abaixo:

Vamos definir os seguintes namespaces usados no formulário:

using System;

using System.Linq;

using System.Windows.Forms;

using MacorattiModeloEntidades;

A seguir vamos incluir no evento Click de cada um dos botões de comando o código abaixo:

1- Evento Click do botão - Exibir Clientes:

 private void button1_Click(object sender, EventArgs e)
        {
            using(var contexto = new NorthwindEntities())
            {
                var clientesPedidos = contexto.Orders
                                               .Where(p => p.ShipCountry == "Brazil");
                lstDados.Items.Add(" Brazil -   Data Pedido ");
                foreach (var cliente in clientesPedidos)
                {
                    lstDados.Items.Add(cliente.CustomerID + " - "  + cliente.OrderDate);
                }
            }
        }

 

Obtém os pedidos onde o pais de envio é igual a Brazil e a seguir exibe o código do cliente e a data do pedido.

2- Evento Click do botão - Exibir Pedidos:

  private void button2_Click(object sender, EventArgs e)
        {
            using (var contexto = new NorthwindEntities())
            {
                var clientesPedidos = from p in contexto.Orders
                                               select p;
                dgvDados.DataSource = clientesPedidos.ToList();
            }
        }

 

Seleciona os pedidos do contexto e exibe o resultado no controle DataGridView.

Executando o projeto e clicando em cada um dos botões teremos:

E assim vimos como você pode compartilhar o seu modelo com diversos projetos independente da linguagem ou do tipo de projeto.

Pegue o projeto completo aqui : UsandoModeloEntidadesMacoratti.zip  e  MacorattiModeloEntidades.zip

"Dando graças ao Pai que nos fez idôneos para participar da herança dos santos na luz; O qual nos tirou da potestade das trevas, e nos transportou para o reino do FIlho do seu  amor;" Colossenses 1-12:13

Referências:


José Carlos Macoratti