Back-End

26 mai, 2010

C# – Usando LINQ to SQL (o retorno)

Publicidade

Este artigo mostra como
usar os recursos do LINQ to SQL em uma aplicação Windows Forms.
Ele foi baseado no artigo de autoria de Scott Lysle.

Embora o Entity
Framework tenha chegado para praticamente substituir o LINQ to
SQL com muitas vantagens, o LINQ to SQL ainda pode ser considerado
com uma alternativa viável para agilizar o desenvolvimento de
aplicações com acesso a dados.

O objetivo do artigo é
mostrar como acessar tabelas, consultas e stored procedures de
um banco de dados SQL Server (o LINQ to SQL só funciona com
ele) e também como realizar operações de alteração,
inclusão e exclusão de dados.

Para o exemplo do
artigo eu vou usar o banco de dados Northwind.mdf e a ferramenta
Visual C# 2008 Express Edition.

A estrutura do banco de
dados Northwind.mdf, exibindo suas tabelas, Views e Stored
Procedures é exibida na figura abaixo:

Vamos criar uma
aplicação Windows Forms e exibir contendo três
formulários:

  • form1.cs – Onde
    iremos exibir as tabelas, consultas e stored procedures
    em um componente DataGridView;
  • form2.cs – Onde
    iremos incluir/alterar um cliente;
  • form3.cs – Onde
    iremos excluir um cliente.

01. O formulário form1.cs
irá exibir o resultado das consultas às tabelas,
querys e stored procedures em um controle
DataGridView e deverá
possuir um menu criado via controle MenuStrip conforme o leiaute
abaixo:

Para cada item do menu
vamos definir sub-itens conforme as figuras a seguir:

a. Consultas

b. Movimento

02. O formulário
form2.cs é exibido na figura abaixo e apresenta os controles
Label e TextBox para realizar a
alteração/inclusão na tabela
Customer:

03. O formulário
form3.cs, da figura abaixo, é usado para excluir um registro da
tabela Customer e possui o controle Label,
TextBox e Button:

Criando
o DataContext e
as classes com o código LINQ to SQL

Agora vamos criar a
infraestrutura usando classes onde devemos criar o código
usando LINQ to SQL. Antes, devemos realizar o mapeamento objeto
relacional para gerar as classes a partir das tabelas do
Northwind.

No menu Project -> Add
New Item
, selecione o template LINQ to SQL Classes, informe
o nome Northwind.dbml e clique em Add.

A seguir, arraste e
solte, a partir da janela DataBase Explorer, as tabelas do Northwind
para o descritor LINQ, a fim de gerar as classes com o
mapeamento ORM. Devemos arrastar também as stored procedures
Sales_by_Year e Ten_Most_Expensive_Products na painel de
métodos
do descritor, conforme a figura abaixo:

Com isso já temos todo
o mapeamento objeto relacional gerado e já podemos trabalhar com
as classes que representam as tabelas do nosso banco de dados.

Para isso eu poderia
criar uma classe e nela definir os métodos para acessar as
tabelas, consultas e stored procedures, e os métodos para
realizar alteração e inclusão, mas vou fazer diferente: vou
criar classes distintas para cada item. Assim, teremos as seguintes
classes:

  • acessoLinqTabelas.cs

    – contém os métodos LINQ para acessar as tabelas
    retornando todos os dados da tabela. Irei retornar os
    dados para as seguintes tabelas:
    Customers,Employees,
    Orders, Categories e Products;

  • acessoLinqConsultas.cs
    – contém os métodos LINQ para acessar as consultas: Orders by ID, Orders and Details e Employees by ID;
  • acessoLinqStoreProcedure.cs
    – contém os métodos para acessar as stored procedures:
    Sales by Year, Ten Most Expensive Products;
  • acessoLinqCrud.cs
    – contém os métodos para realizar as operações de incluir, alterar e excluir registros da tabela Customers.

01.
Criando
a classe para acessar as tabelas

Vamos iniciar, então,
criando a classe para acessar as tabelas selecionando no menu
Project -> Add Class e informando o nome acessoLinqTabelas.cs;

A seguir, defina o
código abaixo na classe:

using System;
using System.Collections.Generic;
using
System.Linq;
using System.Text;

namespace LinqToSQL_Cshp1
{

class acessoLinqTabelas
{
///

/// Obtem dados da tabela Customer
///
summary> obtem; < returns> return
}

///
/// Obtem dados da tabela
Employee
///
///

public static
System.Data.Linq.Table GetEmployeeTable()
{

NorthwindDataContext dc = new

NorthwindDataContext();
return dc.GetTable< return

}
///
/// Obtem dados da
tabela Order
///
///

public static
System.Data.Linq.Table GetOrderTable()
{

NorthwindDataContext dc = new

NorthwindDataContext();
return dc.GetTable< return

}
///
/// Obtem dados da
tabela Category
///
///

public static
System.Data.Linq.Table GetCategoryTable()
{

NorthwindDataContext dc = new

NorthwindDataContext();
return dc.GetTable< return

}
///
/// Obtem dados da
tabela Product
///
///

public static
System.Data.Linq.Table GetProductTable()
{

NorthwindDataContext dc = new

NorthwindDataContext();
return dc.GetTable< return

}
}
}