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
Veja agora o exemplo de implementação do Linq
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
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
Ó 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
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...
