Artigo recomendado para Visual Studio 2008;SQL Server 2005/2008

A utiliza√ß√£o de padr√Ķes baseados em orienta√ß√£o a objetos, tornou-se um dos requerimentos em qualquer aplica√ß√£o atual. J√° possu√≠mos pleno dom√≠nio do  mundo OOP (Object Oriented Programming). Ent√£o chegou o momento de vencermos mais um desafio que √© a barreira existente entre dados e objetos. Nosso primeiro passo ser√° portar toda essa experi√™ncia adquirida  para fechamos o elo faltante que √© a integra√ß√£o com base de dados, arquivos XML e objetos. A partir desse momento, estamos dando um grande salto na evolu√ß√£o de todos os conceitos atuais e iniciado de vez na linha do O/R Mapping (Mapeamento Objeto Relacional) e na explora√ß√£o plena e orienta√ß√£o aos objetos no desenvolvimento de software. O .NET recebeu algumas extens√Ķes para permitir amplo suporte ao novo modelo de manipula√ß√£o de objetos que ganhou o nome de LINQ (Language Integrated Query) conforme figura 01.


Figura 01 - Introdução ao LINQ

As mais diversas consultas de dados serão encapsuladas pelo mecanismo do LINQ expondo apenas objetos, tornando transparente se você usa um banco de dados, um xml ou outra fonte de dados qualquer.

.NET Framework 3.5

Para permitir o suporte a linguagem integrada de consulta, foi incorporado ao .NET algumas novas funcionalidades de forma a suportar o LINQ (Linguagem Integrada de Consulta). Dentre as novas funcionalidades, podemos citar: Tipos an√īnimos, express√Ķes lambdas e extens√Ķes de m√©todos, al√©m da query  de consulta.

O/R Mapping

O modelo de mapeamento objeto relacional para banco de dados SQLServer, consiste no mapeamento das tabelas do banco de dados como classes, campos como propriedades, procedures e fun√ß√Ķes como m√©todos de forma que voc√™ tenha no designer de classe da aplica√ß√£o um conjunto de classes que representam vis√£o 1:1 do seu banco de dados. Acompanhe na figura 02 a tabela 'Products' do banco de dados e na figura 03 a representa√ß√£o da mesma j√° mapeada como a classe 'Product' conforme figura 03. Uma vez feito o mapeamento pelo simples processo de arrastar a tabela do banco para dentro do designer de classes, os desenvolvedores do projeto j√° podem usar o LINQ para manipular os objetos criados a partir das classes mapeadas.


Figura 02 - Tabela 'Products' do banco de dados


Figura 03 - Classe mapeada 'Product'

Após estabelecer o mapeamento, os benefícios são imediatos pois, a classe mapeada é igual a qualquer outra do .net. Então você de imediato, já vai ter acesso pelo Intellisense do Visual Studio sem precisar conhecer nomes de campos no banco de dados que agora aparecem para você como propriedades. Outro ganho, é sobre as consultas do LINQ que mostrarei logo a seguir. Como todo acesso será por meio das mesmas, você só vai escrever código .NET que além do Intellisense já comentado será validado contra erros de digitação pelo compilador.

Para melhor entender esse novo cen√°rio, vamos retornar ao acesso tradicional usando ADO.NET para recuperar as informa√ß√Ķes do nosso banco de dados conforme Listagem 1.

ADO.NETSqlConnection c = new SqlConnection(…);

c.Open();

SqlCommand cmd = new SqlCommand(
@"SELECT p.ProductID, p.ProductName
FROM Products p
WHERE p.ProductName = @p0
");

cmd.Parameters.AddWithValue("@p0", "XYZ“);

DataReader dr = c.Execute(cmd);

while (dr.Read())
 
{
string ID = dr.GetString(0);
string ProductName = dr.GetString(1);
 }
dr.Close();
Listagem 01 - Consulta usando ADO.NET.

Agora que você já relembrou o acesso tradicional, confira na listagem 02 e na figura 04 o novo modelo de consulta utilizando o LINQ
.


LINQvar db = new NorthwindDataContext();

var consulta = from p in db.Products
                    where (p.ProductName=="ZYZ")
                    select new
                   {p.ProductID,p.ProductName};

this.GridView1.DataSource = consulta;
this.GridView1.DataBind();

 Listagem 02 - Consulta usando LINQ.

Figura 04 - Digitando consulta para coleção de produtos.

Voc√™ deve ter tido duas rea√ß√Ķes. Primeiro viu a diferen√ßa na qualidade de linhas de c√≥digo para fazer a opera√ß√£o e n√£o tenho d√ļvidas que voc√™ j√° est√° curioso para aprofundar os estudos no LINQ to SQL. Em segundo, deve estar estranhando a forma de constru√ß√£o desse c√≥digo e a√≠ que entra o .NET 3.5. Declaramos um objeto an√īnimo chamado de consulta e depois seu tipo com o resultado da query expression na cole√ß√£o Products. Ao fazermos essa consulta, o LINQ vai converter essa solicita√ß√£o em um c√≥digo T-SQL e vai buscar no banco de dados as linhas referentes aos objetos solicitados. Ao receber a resposta do banco de dados, ele vai retornar uma cole√ß√£o de objetos que armazenaremos no objeto consulta. O resto foi somente popular essa cole√ß√£o no gridview. Voc√™ pode conferir o exemplo do c√≥digo T-SQL gerado pelo LINQ na listagem 03. Uma caracter√≠stica importante que vale ressaltar nesse momento, √© que o objeto consulta mesmo sem ser inicializado com um tipo especifico, ele √© fortemente tipado, sendo que logo ap√≥s a defini√ß√£o do seu tipo, ele n√£o pode ser modificado.

 

T-SQLSELECT [t0].[ProductID], [t0].[ProductName]
FROM [dbo].[Products] AS [t0]
WHERE [t0].[ProductName] = 'ZYZ';

Listagem 03 - Código T-SQL gerado pelo LINQ.

Conforme você observou na figura 04, com o LINQ seu acesso a dados será simplificado e o conhecimento da base de dados será o uso da sua linguagem de programação no dia a dia usando o próprio
Intellisense sem precisar conhecer todos os nomes do banco de dados. Um comentário interessante ainda sobre essa questão, é o código 'where' na figura 04 e o código T-SQL gerado no banco de dados conforme listagem 03, onde você observa que um código .net é convertido para código T-SQL pelo LINQ.

Para saber mais:
LINQ TO SQL para iniciantes


Até próximo artigo
Sucesso em seus projetos.