ASP.NET - Usando LINQ To SQL


O SQL já era...?

Com a introdução do LINQ to SQL os desenvolvedores não terão que sujar mais as suas mãos trabalhando diretamente com código SQL...

Grande parte do esforço feito no desenvolvimento de aplicações ASP .NET esta relacionado com a criação e manutenção do código para acessar os dados. O LINQ To SQL veio para reduzir esse esforço.

O desenvolvedor tem que tratar duas frentes: classes e objetos e o modelo relacional. A linguagem VB .NET/C# e a linguagem SQL, uma para tratar os objetos e outra para tratar o modelo relacional com banco de dados e tabelas. A comunicação entre elas é feita geralmente embutindo o código SQL no código VB.NET.

O LINQ to SQL veio para criar uma ponte entre as duas frentes de forma a permitir que o código SQL seja escrito na linguagem que você escolheu VB .NET ou C#  ficando responsável por fazer a tradução para SQL de forma transparente.

Existem diversas opções do LINQ :

Estas diversas opções permitem que você se comunique com diferentes tipos de fontes de dados, assim o LINQ to Flickr, por exemplo, permite que você efetue consultas com fotos armazenadas no web site Flickr.

Neste artigo eu vou focar o LINQ to SQL que permite efetuar a comunicação com o banco de dados SQL Server (Não funciona com Oracle ou Access)

Para você poder usar o recurso do LINQ to SQL em suas aplicações você tem que usar a versão 3.5 da plataforma .NET. Para o escopo deste artigo podemos usar o Visual Web Developer 2008 Express Edition que você pode obter de forma gratuita no site: http://www.microsoft.com/express/download/

Antes de começar a usar os recursos do LINQ to SQL em sua aplicação ASP .NET você primeiro tem que criar as entidades LINQ to SQL, essas entidades são classes VB.NET que representam uma entidade do seu banco de dados. Assim se o seu banco de dados contém uma tabela chamada Orders você tem que criar uma entidade chamada Order que representa cada pedido da tabela Orders. A classe Order irá incluir uma propriedade para cada coluna da tabela Orders.

Para fazer isso no VWD 2008 ou no VB 2008 você pode usar o descritor objeto relacional simplesmente incluindo uma referência ao template LINQ to SQL Classes e em seguida arrastando as tabelas do banco de dados a partir do DataBase Explorer no descritor Objeto Relacional:

- Referenciando o template LINQ to SQL classes no seu projeto. O nome dado ao DataContext gerado foi: Northwind.dbml;

- O arquivo será incluído na pasta App_code;

Criando a entidade Order a partir da tabela Orders do banco de dados Northwind.mdf;

Nota: Deve existir uma conexão criada com o banco de dados Northwind.mdf. O banco de dados será incluído na pasta App_Data;

Note que foi criada a classe Order que inclui propriedades para cada uma das colunas da tabela Orders correspondente e que a chave primária foi identificada.

Para ver o código gerado para efetuar o mapeamento entre a entidade e a tabela abra o arquivo Northwind.designer.vb na janela Solution Explorer (para ver o arquivo clique no ícone - Nest Related Files.

Depois de criar as entidade(s) LINQ To SQL usando o descritor Objeto Relacional você pode começar a realizar consultas LINQ To SQL usando duas sintaxes: sintaxe de método (method) ou sintaxe de consulta (query).

Vejamos a seguir um exemplo de sintaxe de método:

Inclua um novo item no seu projeto e selecione o template Class informando o nome Order.vb;

A seguir inclua o código abaixo na classe que acabou de criar:

Partial Public Class Order

    Public Function getOrdersMethod() As IEnumerable(Of Order)
        Dim db As New NorthwindDataContext()
        Return db.Orders
    End Function

End Class

O método getOrdersMethod() retorna todos os pedidos (Orders) da tabela Orders do banco de dados.

A primeira linha de código criar uma instância da classe NorthwindDataContext que foi criada quando arrastamos a tabela Orders para o descritor objeto relacional.

A seguir a propriedade Orders desta classe é usada para retornar todos os pedidos.

Se você preferir um código que lembra mais o SQL você pode usar a sintaxe de consulta que é mostrada a seguir:

 Public Function getOrdersQuery() As IEnumerable(Of Order)
        Dim db As New NorthwindDataContext()
        Return From o In db.Orders Select o
 End Function

Veja os dois métodos na classe Order.vb;

A única diferença no código é a expressão LINQ : From o In db.Orders Select o   que retorna todos os pedidos da tabela Orders.

Agora para exibir os dados em uma página ASP .NET usando um controle GridView podemos usar um controle ObjectDataSource para representar a classe Order:

- Selecione a página Default.aspx e a partir da ToolBox , na guia Data, selecione o controle GridView e arraste para o formulário no modo Design;

- Em GridView Tasks , opção Choose Data Source, selecione a opção: <new data source...>

Em seguida selecione a opção Object como tipo de fonte de dados e informe o nome oOrderDS;

Na janela Choose a Business Object selecione a classe Order que criamos com os métodos para selecionar os pedidos;

Agora podemos selecionar um dos métodos que definimos na classe Order;

Clicando no botão Finish será exibido os dados no controle ObjectDataSource;

Executando a página iremos ver exibidos no controle GridView todos os pedidos da tabela Orders.

Note que você não precisou abrir uma conexão com o banco de dados ou definir um objeto Command nem escrever qualquer código SQL ou ADO .NET, o LINQ To SQL fez todo o trabalho para você reduzindo assim o código para acessar os seus dados , com menos código a ser escrito menor a probabilidade de erros e maior a velocidade no desenvolvimento.

Aguarde a continuação deste artigo quando irei mostrar como criar uma página Mestre-Detalhes usando LINQ To SQL...

Pegue o projeto referente a esta primeira parte aqui : aspnLINQ1.zip (sem a base de dados)

Até lá... 


José Carlos Macoratti