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 :
É 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:
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="data source=.\SQLEXPRESS;initial catalog=Northwind;integrated security=True;multipleactiveresultsets=True;App=EntityFramework"" 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: