segunda-feira, 18 de fevereiro de 2008

Novidades .NET 3.5 - Linq to SQL

A framework 3.5 do .NET vem recheada de novidades, dentre uma delas está o Linq to SQL. Hoje em dia é praticamente um pré-requisito o desenvolvimento de aplicações em cima de padrões orientado a objetos (OOP). Porém a implementação desse modelo de programação ainda é ardua em alguns casos, principalmente quando falamos de dados e objetos.

Para resolver esse problema entre objetos e dados, a mirosoft adicionou extensões na framework 3.5 e uma delas é o Linq (Language Integrated Query).

Para que possamos nos aprofundar em Linq to SQL primeiramente precisamos entender bem o que é o Linq, pois se faz uma grande confusão diante as novidades do .NET.

Linq - Language Integrated Query

LINQ (Language Integrated Query) é uma nova forma de realizar pesquisas em conjuntos de dados, seja ela em objetos, xml, objetos relacionais, dentre outros.
A idéia é utilizar uma sintaxe muito semelhante à sintaxe SQL para realizar pesquisas em bloco de informações, filtrando os dados (de forma horizontal ou vertical) quando necessário através da associação de operadores.
O interessante do Linq é a possibilidade de integrarmos ele a qualquer tipo de cenária, podemos manipular como será a tradução dessas consultas. O Linq é baseado em providers, no qual cada um desenvolve um provider para um determinado fim.

Exemplo disso é a criação de implementações do Linq para SQL Server, XML, Objetos, DataSet, etc.

Veja abaixo uma imagem que descreve a arquitetura do Linq

fig01_L 
Veja agora o exemplo de implementação do Linq

codigo

Linq to SQL

O Linq to SQL é um exemplo de implementação do Linq voltada para o banco de dados SQL Server. Frisando isso que é dúvida de muitas pessoas, o Linq to SQL é específico para o banco de dados SQL Server, essa é uma limitação que a própria microsoft fez devido as incompatibilidades entre os bancos.

Na realidade quando uma instrução é feita no Linq, o provider feito específico para essa finalidade, transforma a instrução em comando T-SQL, com isso o provider acessa o banco e materializa os objetos.

Exemplo disso temos o nHibernate no qual ele faz essa camada de manipulação de objetos e dados, fazendo um mapeamento objeto relacional.

No meu ponto de vista o Linq tem grandes vantagens encima do nHibernate por diversos fatores técnicos, desde performance até a nível de implementação.

Os operadores do Linq estão contidos dentro da própria IL tornando assim algo nativo da framework, e conhecendo um pouco o código por dentro do Linq to SQL vi que até a parte de materialização dos objetos é feito com a IL tendo assim um ganho de performance muito grande.

Tirando os detalhes técnicos, o Linq to SQL é uma mão na roda para podermos manipular os dados do banco de dados em forma de objetos, sem falar nas instruções query que podemos fazer com o Linq no qual o provider automaticamente a transforma em instruções SQL, fazendo a consulta no banco de dados e retornando o resultado.

Abaixo veremos uma imagem de um diagrama de relacionamento dos objetos, gerado conforme o modelo do banco de dados

step1

Esse diagrama foi gerado através de uma ferramenta que vem dentro do próprio Visual Studio 2008, no mesmo instante é gerado classes onde dentro da classe é feito o mapeamento objeto relacional.

A estrutura como essas classes são geradas obedece aos padrões de OO gerando agregações e coleções dentro das classes. Junto as entidades é criada uma classe maior herdando de DataContext no qual faz o papel de repositório maior onde dentro dela está todas as instruções pra poder efetivas as transações dentro do banco, adicionar novos objetos, deletar, fazer consultas e consolidara alterações.

Veja abaixo um exemplo da implementação do Linq to SQL

step3

Ó código acima representa uma consulta na qual "p" representa um produto dentre os produtos que estão em "db.Products" onde "db" é a classe maior onde tem uma coleção de Produtos. A instrução a baixo "Where" diz que um produto deve ter a "Category" com o nome igual a "Beverages", e por final ele retornará "p" que é um produto.

No final o Linq to SQL transforma a Lambda Expressions para SQL e faz uma consulta no banco com essas condições e retorna o resultado da consulta.

Vejamos outro exemplo de implementação Linq to SQL abaixo

step5
O código acima utiliza o método Single no qual ele obtém um objeto do tipo produto passando uma condição no qual o ProductName vai ser igual a “Toy 1”.

Em seguida ele faz uma alteração na propriedade UnitPrice e UnitsInStock, no final ele da um submit no DataContex concretizando as modificações, é como se fosse um Commit no banco.

Conclusão

Bom pessoa, espero que vocês tenham entendido um pouco sobre essa grande novidade da microsoft e tenha entendido a diferença entre Linq e Linq to SQL.

No meu próximo artigo estarei colocando uma super novidade sobre o Linq to SQL.

Até mais...

Introdução

Olá pessoal, esse é meu blog onde estarei postando todos os artigos de minha autoria e outros artigos no qual eu ache interessante.

Meu blog vai tratar da área que atuo que é no desenvolvimento e análise de aplicações em .NET e Mono.

Atualmente sou analista de sistemas de um órgão do governo do estado do ceará, onde desenvolvo aplicações corporativas na plataforma Mono (.NET para Linux).

No demais do tempo prospecto novas tecnologias e maneiras de programação mais eficiente, buscando uma maior produtividade com tecnologia de ponta.

No momento estou estudando as novidades do .NET 3.5 e vendo as novidades do Visual Studio 2008.

Então fiquem atentos nos artigos, em breve estarei postando muitas novidades.

Atenciosamente

Thiago Amarante