Desenvolvimento - ADO.NET
Entity Framework 4: Descobrindo o ADO.NET
Com este artigo podemos notar que o ADO.NET Entity Framework, apesar de ser um framework novo, já está bem mais robusto nesta nova versão, recebeu várias atualizações importantes e ainda receberá muito mais.
por André BaltieriÉ normal no desenvolvimento de aplicações (Windows, Web, Mobile e etc) dirigirmos todo o nosso foco para a fonte de dados. Normalmente temos um banco de dados revisado, estruturado e pronto para ser consumido, sendo assim, nossa principal missão é fazer com que a aplicação acesse estes dados, manipule-os da forma desejada e se necessário devolva-os ao banco.
Nota: Chamamos este desenvolvimento de Database-First development.
Por outro lado, existe também um cenário cujo o desenvolvimento e o banco de dados são feitos sobre o diagrama de classes. Neste caso, temos ferramentas que automaticamente convertem nosso diagrama para as classes da aplicação.
Nota: Chamamos este desenvolvimento de Model-First development.
O ADO.NET Entity Framework é a nova plataforma de acesso a dados desenvolvida pela Microsoft e primeiramente incorporado no Service Pack 1 do Visual Studio 2008 e .NET Framework 3.5. A Microsoft desde então, tem investido bastante neste poderoso Framework, e atualizações constantes andam sendo feitas.
Mas por que uma nova plataforma de acesso a dados, se tínhamos os DataSets, DataReaders que já estão testados e funcionando a tempo? Talvez o principal benefício seja sua alta produtividade, visando que você não precisa se preocupar com o seu modelo de dados, tudo será gerado a partir de ferramentas integradas no Visual Studio. Os modelos gerados possuem entidades que representam as tabelas do seu banco de dados, sendo assim, trabalhamos de forma orientada à objetos. Resumidamente, todo controle de acesso ao banco, modelo conceitual de regras de negócio é feito pelo EF.
Características do ADO.NET Entity Framework 4.0
Nota: Esta sessão demonstra as novidades adicionadas ao ADO.NET Entity Framework 4.0, caso necessário, recorra a mesma mais tarde, quando estiver mais integrado com a plataforma.
- Persistence Ignorance - Permite a definição do seu próprio POCO (Plain Old CLR Object), que são desacoplados de qualquer persistência específica.
- T4 Code Generation - Foram adicionados vários T4 Code Generation templates, cujo podem ser alterados de acordo com as necessidades do projeto.
- Lazy Loading - Com esta adição, podemos com simples comandos fazer com que um objeto pai, carregue automaticamente seus objetos filhos. Exemplo: Podemos carregar um pedido e automaticamente os itens do pedido serão carregados.
- POCO Change-Tracking - Foram adicionados dois modelos para rastrear mudanças nos POCOs. Por padrão, o EF tira um snapshot do estado original do objeto e então compara com o novo estado, quando salvando as alterações. No outro caso, podemos definir as propriedades como Virtual para que o estado possa ser rastreado continuamente e mantido em sincronia com o Object State Manager.
- Melhorias no suporte a aplicações N-tier com entidades Self-Tracking - Inclusão de templates T4 para geração de entidades que rastreiam suas próprias mudanças no cliente, que são serializadas e salvas na base de dados.
- Model-First development - Neste modo, pode-se criar diretamente o modelo de entidades dentro do Visual Studio e exportá-lo para um script SQL que gerará o banco de dados.
- Code-Only development - Neste modo, primeiro escreve-se o código, em seguida o modelo e banco de dados são gerados.
Aplicação do ADO.NET Entity Framework no cenário de Web Services
Em grandes corporações é fato que encontraremos vários tipos de aplicações distintas, uma em C#, outra em Delphi, Java e assim por diante. Sendo assim, cada vez mais o conceito de serviços vem sendo utilizado, de forma que podemos integrar aplicações expondo e consumindo serviços.
O ADO.NET Entity Framework também pode ser utilizado neste cenário, interagindo perfeitamente com Web Services e o WCF (Windows Communication Foundation).
Entity Data Model
O EDM (Entity Data Model) é um conceito que no EF foi implementado de forma que nos trouxe muita produtividade. Quando falamos em modelo de entidades de dados, nos referimos aos arquivos .edmx, que armazenam as informações de mapeamento de cada entidade para sua tabela na fonte de dados. Este conjunto de entidades e relacionamentos são o que chamamos de Entity Data Model.
Ainda no EDM, temos duas propriedades importantes, EntityContainerName e seu Namespace, que é utilizado para que suas entidades possam ser acessadas.
Criando um Entity Data Model
Nota: Para este trecho do artigo, serão utilizados o Visual Studio 2010, SQL Server 2008 Express e o banco de dados Northwind. Ao final deste artigo você poderá encontrar os mesmos para download.
Com o Visual Studio 2010 aberto, clique com o botão direito do mouse sobre o projeto (Ou pasta onde desejar criar o modelo) e em seguida acesse a opção Add e New Item, como mostrado na Figura 1.
Figura 1 - Adicionando um novo Entity Data Model
Na janela que se abre, selecione a opção Data no painel a esquerda, e em seguida selecione o item ADO.NET Entity Data Model no painel central. Nomeie o arquivo como desejar e por fim, clique sobre a opção Add, como mostrado na Figura 2.
Figura 2 - Adicionando um item do tipo ADO.NET Entity Data Model.
Sendo assim, o Wizard para criação do EDM aparecerá, contendo duas opções:
- Generate From Datebase - Gera o EDM baseado em uma fonte de dados, mapeando as tabelas para suas respectivas entidades.
- Empty Data Model - Cria um EDM vazio, onde será possível criar manualmente entidades.
Para este cenário, deixe a opção Generate from Database selecionada e clique sobre Next, como mostrado na Figura 3.
Figura 3 - Entity Data Model Wizard.
A tela sequente é uma tela conhecida, que é a tela de configuração da string de conexão a fonte de dados, a famosa Connection String. Apenas não se esqueça de marcar a opção Save entity connection strings in App.Config as: e nomeie a connection string como desejada, em seguida, clique em Next, como mostrado na Figura 4.
Figura 4 - Configurando a Connection String.
Na próxima tela, temos as informações mais importantes, primeiro temos a possibilidade de escolher se queremos trabalhar com Tabelas, Views e Stored Procedures. Para este exemplo selecione somente Tables. Seguindo em frente, temos a opção de pluralizar ou singularizar o nome dos objetos gerados, ou seja, se sua tabela chama Categoria, seu Entity Set se chamará Categorias. Por fim, temos o Namespace.
A Figura 5 ilustra as opções mencionadas anteriormente.
Figura 5 - Configurando os objetos a serem gerados.
Se tudo ocorreu certo, no final deste Wizard, teremos o seguinte modelo, como demonstrado na Figura 6.
Figura 6 - Modelo de entidades gerado pelo Wizard.
A partir deste momento, temos um diagrama, que pode ser manipulado visualmente inclusive.
A Figura 7 mostra as propriedades do arquivo .edmx, cujo as mais importantes são:
- Code Generation Strategy -
- Connection String -
- Database Generation Workflow -
- DDL Generation Template -
- Entity Container Name - Nome do conjunto completo de entidades que foram geradas.
- Namespace - Caminho lógico onde o conjunto de entidades está.
Figura 7 - Propriedades do arquivo .edmx.
A Figura 8 mostra as propriedades da entidade Customer, sendo as mais importantes:
- Access - Tipo de acesso que a classe poderá receber.
- EntitySet Name - Nome do conjunto de entidades.
- Name - Nome da entidade.
Figura 8 - Propriedades da entidade.
Trabalhando com o EDM gerado
Com o EDM feito, podemos facilmente acessar dados, sem necessidade de muito hard-code e sem necessidade de ficar preocupando-se com abertura e fechamento de conexões com o banco de dados.
Além disso, o retorno de suas consultas resulta em um IQueryable, que pode ser facilmente percorrido por um foreach, atribuído a uma GridView e outros controles com suporte. Pode-se também filtrar a lista retornada de forma simples, utilizando LINQ.
Listando todos os registros de uma tabela (Select - Read)
Consultas a fonte de dados serão necessárias a todo momento, chamamos estas de seleções (Selects) que se encaixam nos métodos de leitura (Read) dentro do conceito de CRUD (Create, Read, Update e Delete), que são os métodos básicos (E muitas vezes essenciais) de uma entidade.
O código da Listagem 1ilustra como podemos percorrer de forma simples um conjunto de entidades e listá-los na tela.
01static void Main(string[] args)02{03 // Instancia o objeto que contém as entidades04 NorthwindEntities _db = new NorthwindEntities();05 06 // Percorre todos os customers07 foreach (Customer item in _db.Customers)08 {09 // Escreve o ContactName na tela10 Console.WriteLine(item.ContactName);11 }12 13 Console.ReadKey();14}
Listagem 1 - Percorrendo um conjunto de entidades e listando-os na tela.
Criando uma consulta simples com LINQ para filtrar registros
Outro ponto interessante, é que com LINQ podemos criar consultas de forma simples, como mostrado no Listagem 2.
01// Instancia o objeto que contém as entidades02NorthwindEntities _db = new NorthwindEntities();03 04// Utiliza LINQ para filtrar os clientes do Brasil05var customersInBrazil = (from c in _db.Customers where c.Country == "Brazil" select c);06 07Console.WriteLine("------------------- Customers in Brazil -------------------");08 09// Percorre os clientes do Brazil10foreach (Customer item in customersInBrazil)11{12 Console.WriteLine(item.ContactName);13} Listagem 2 - Criando uma consulta simples com LINQ para listar os clientes do Brasil. Alterando os dados de um registroNa versão 4.0 do ADO.NET Entity Framewor, um novo método para atualização de registros fora adicionado. Trata-se do método ApplyApplyPropertyChanges(string entitySetName, object changed). Este método possibilita que as atualizações sejam feitas simplesmente informando o nome do conjunto de entidades da qual a entidade a ser atualizada pertence e o próprio objeto a ser atualizado. A Listagem 3 ilustra como uma atualização pode ser feita.
|