Entity Framework 4 - Operações básicas de acesso a dados - 1
A nova versão do Entity Framework (a versão 4) melhorou muito e, se no início o Entity Framework(EF) já podia ser considerado como uma opção viável para a construção de sua aplicação com acesso a dados, agora você deve realmente considerar que o EF entrou pra valer na briga das ferramentas ORM e persistência. |
Como qualquer outra ferramenta OEM o EF não é perfeito mas com certeza evoluirá em futuras versões o que o torna uma opção muito interessante e viável a longo prazo.
Para quem é novo e esta ouvindo falar do EF agora eu recomendo que leia os artigos da seção Entity Framework do site.
Neste artigo eu quero mostrar como o EF pode simplificar a vida do desenvolvedor mesmo em tarefas básicas e convencer assim quem ainda esta meio desconfiado com a ferramenta.
Vamos ao nosso caso...
Suponha que você tenha um pequeno sistema de vendas onde deve registrar os pedidos dos clientes.
Na interface da aplicação Windows Forms abaixo temos a estrutura básica para este aplicação que funciona da seguinte forma:
- Os clientes cadastrados são
exibidos em um controle ListBox; - Os produtos cadastrados são exibidos em um controle ComboBox; - Para registrar o pedido de venda temos que selecionar um cliente e um produto; - Os dados do cliente (nome,endereço) e do produto (preço) são exibidos automaticamente nos controles TextBox; - Resta informar a quantidade e data do pedido e acionar o botão: Confirmar Pedido para registrar o pedido de venda; |
É um cenário simples mas que envolve alguns procedimentos padrão como :
Se você já realizou algumas destas tarefas básicas usando ADO .NET sabe que terá que seguir diversos passos como definir os objetos para conexão e persistência no banco de dados como : DataAdapter, DataSet, DataTable, Connection, comandos SQL , etc...
Apenas para recordar veja abaixo um trecho de código geralmente usado para este tipo de tarefa:
Dim conexaoString As String ="server=(local)\SQLEXPRESS;integrated
security=sspi;database=NomeBancoDados" Dim comandoSQL As String = "Select campo1,campo2, ... from Tabela" Dim da As New SqlDataAdapter(commandString, connectionString) Dim ds As New DataSet( ) da.Fill(ds, "tabela") Dim dt As DataTable = ds.Tables(0) |
Vou mostrar que usando o Entity Framework(EF) você não vai precisar ter que se preocupar mais com esses detalhes deixando tudo isso a cargo da ferramenta ORM.
Para este exemplo eu crie um modelo de dados básico baseado no banco de dados Northwind.mdf que você vê abaixo:
O modelo de dados ao lado
consiste das seguintes tabelas: -
Tabela Clientes Cada tabela possui uma chave primária do tipo identity definida e no modelo podemos identificar os seguintes relacionamentos: - Clientes -> Pedidos : Um-para-Muitos |
Foi criado o banco de dados JcmSoft.mdf e as tabelas acima usando o SQL Server 2005 Express Edition.
Eu vou usar o Visual Studio 2010 para criar o projeto Windows Forms e usar o Entity Framework.
Vamos criar uma solução com dois projetos: o projeto chamado Persistencia onde teremos o Entity Data Model e o projeto Windows Forms: WF_Operacoes_BD, dessa forma estamos criando uma camada de acesso e persistência usando o Entity Framework.
Abra o VS 2010 e no menu File->New Project selecione Other Project Types ->Visual Studio Solutions e o template Blank Solution informando o nome ef4_Operacoes_BD;
Agora vamos criar o projeto Persistencia; clique com o botão direito sobre o nome da Solução e selecione Add -> New Project e a seguir selecione Other Languages -> Visual C# e o template Class Library informando o nome Persistencia e clicando em OK;
O próximo passo é criar o nosso modelo de entidades baseado no modelo de dados que já temos criado. Para isso devemos criar 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 :
|
É 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 do Entity Framework.
Para isso clique com o botão direito sobre o projeto Persistencia e selecione Add -> New Item e a seguir selecione no item Data a opção ADO .NET Entity Data Model e informe o nome JcmSoft.edmx e clique em Add;
O arquivo edmx é um arquivo XML que contém o mapeamento para o nosso modelo físico. Ele é composto por três arquivos internos que são desmembrados em tempo de execução :
Na tabela abaixo temos a descrição de cada uma das partes de um arquivo EDMX:
SSDL (Storage Model) | Descreve o banco de dados no qual estaremos trabalhando os dados. |
CSDL (Conceptual Model) | Descreve os nossos objetos no modelo, sejam entidades, tipos complexos, navigation properties. |
MSL (Mapping Model) | Descreve o mapeamento objeto-relacional (ORM), para que o SSDL e o CSDL possam se relacionar corretamente. |
O assistente Entity Data Model irá surgir, selecione a opção Generate From DataBase e clique em Next>;
Na próxima janela seleciona a conexão com o banco de dados do modelo que nosso caso é o banco de dados JcmSoft;
Aceite o nome para entity connection : JcmSoftEntities e clique em Next>;
Para encerrar selecione as tabelas do banco de dados e marque a opção Pluralize or singularize generated object names , aceite o nome para modelo e clique en Finish;
Obs: A opção Pluralize or singularize generated object names é uma novidade da nova versão do EF.
Ao final você verá o modelo de entidades gerado onde cada entidade esta mapeada para uma tabela no banco de dados, conforme a figura abaixo onde o mapeamento ORM já foi efetuado permitindo que a partir de agora possamos trabalhar com entidades e objetos em nosso objeto abstraindo assim o tratamento da conexão, objetos de acesso a dados e comandos SQL;
Nosso modelo de entidades apresenta o nome da Entidade, Properties e Navigation Properties onde;
Se você abrir o arquivo App.Config do projeto irá notar que a string de conexão foi gravada na seção connectionStrings:
Embaixo, podemos notar o nome da connection string no arquivo App.config
<?xml
version="1.0"
encoding="utf-8"?> <configuration> <connectionStrings> <add name="JcmSoftEntities" connectionString="metadata=res://*/JcmSoft.csdl|res://*/JcmSoft.ssdl| res://*/JcmSoft.msl;provider=System.Data.SqlClient;provider connection string=" Data Source=MAC-PC\SQLEXPRESS;Initial Catalog=JcmSoft;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" /> </connectionStrings> </configuration> |
Vamos agora criar o projeto Windows Forms; clique com o botão direito sobre o nome da Solução e selecione Add -> New Project e a seguir selecione Other Languages -> Visual C# e o template Windows Forms Application informando o nome WF_Operacoes_BD e clicando em OK;
Antes de continuar precisamos copiar o arquivo App.Config do projeto Persistencia para o projeto WF_Operacoes_BD;
Precisamos também incluir uma referência a biblioteca System.Data.Entity no projeto WF_Operacoes_BD;
Após realizar estas tarefas teremos na janela Solution Explorer A solução exibindo os dois projetos onde o projeto Windows Forms deverá conter a referência a System.Data.Entity e o arquivo App.Config |
Para encerrar a primeira parte deste artigo vamos definir também o leiaute da interface no formulário padrão form1.cs usando os controles ListBox, TextBox, ComboBox, NumericaUpDown e DateTImePicker conforme a figura abaixo:
E com isso criamos toda a infra-estrutura e estamos pronto para efetivamente realizar o acesso e a persistência de dados, e iremos fazer isso trabalhando com objetos e não diretamente com o modelo conceitual da aplicação sem fazer o acesso direto ao banco de dados.
Aguarde a segunda parte no artigo: Entity Framework 4 - Operações básicas de acesso a dados - 2
Eu sei é apenas Entity Framework mas eu gosto...
Referências: