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; <> 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
}
}
}
0 comentários:
Postar um comentário