ASP
.NET - Usando LINQ para manutenção de dados (CRUD)(C#)
Logo de cara já vou avisando :
"Se você desconhece os conceitos sobre LINQ sugiro que leia
os artigos da seção LINQ no site" ( LINQ
)
Este artigo é essencialmente prático e mostra como realizar a manutenção de dados em uma aplicação ASP .NET usando LINQ to SQL e C#.
Neste artigo eu não vou usar o descritor LINQ para gerar o mapeamento objeto relacional, o que seria a opção mais fácil, mas quero mostrar como você pode gerar este mapeamento manualmente para com isso ter uma compreensão mais exata do que esta ocorrendo 'por trás dos panos'.
Então , se você adora os
assistentes que geram o código, neste artigo você vai ter que
gerar manualmente o mapeamento. Certo ???
![]()
As ferramentas necessárias para acompanhar este tutorial podem ser obtidas gratuitamente via download e são:
Abra o VWD 2008 e selecione Create - New Web Site ou no menu File -> New web site, e, selecione o template ASP .NET Web Site, o location System e a language -> Visual C#. A seguir informe o nome do web site : LINQManutencaoDados e clique em OK;

No menu WebSite selecione Add Reference e inclua uma referência ao System.Data.Linq;

No menu WebSite -> Add New Item selecione o template Class e informe o nome funci.cs; Isso irá criar a classe funci que iremos usar no projeto;

Digite o código abaixo na classe funci.cs que mapeia a tabela Funci para a classe Funci;
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.Linq.Mapping;
/// <summary>
/// cria a tabela funcionarios
/// </summary>
[Table(Name = "Funcionarios")]
public class Funci
{
private int _funciID;
[Column(IsPrimaryKey = true)]
public int funciID {
get { return _funciID; }
set { _funciID = value; }
}
private string _nome;
[Column()]
public string Nome {
get { return _nome; }
set { _nome = value; }
}
private Nullable<decimal> _salario;
[Column()]
public Nullable<decimal> Salario
{
get { return _salario; }
set { _salario = value; }
}
private Nullable<int> _setorID;
[Column()]
public Nullable<int> setorID
{
get { return _setorID; }
set { _setorID = value; }
}
}
|
Devemos ter um banco de dados SQL Server 2005 Express Edition contendo uma tabela com uma estrutura para que o mapeamento da classe Funci.cs para a tabela seja efetuado corretamente. Para isso eu vou criar um banco de dados chamado Cadastro.mdf e duas tabelas : Funcionarios e Setores.
A tabela Funcionarios deve possuir a seguinte estrutura:
![]() |
O campo FunciID é definido como chave primária mas não é do tipo Identity ou seja não é auto-numerado pois vamos poder informar o código do funcionário para incluir um novo funcionário. (Você pode mudar esta estratégia deixando que este valor seja administrado pelo SQL Server.)
Vamos então criar uma conexão com o banco de dados
Cadastro.mdf; A partir da janela DataBase Explorer clique no ícone
- Conect to
Database;
A seguir clique no botão Browse e selecione o banco de dados Cadastro.mdf onde foi criado, neste projeto esta na pasta c:\dados;
Se desejar pode verificar as propriedades avançadas clicando em Advanced...;
Para encerrar clique em OK até fechar as janelas abertas;
![]() |
Na janela Database Explorer , clicando sobre o banco de dados iremos verificar na janela de propriedades a propriedade ConnectionString:
"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\dados\Cadastro.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
Esta string será usada na conexão com o banco de dados Cadastro.mdf.
Na página Default.aspx inclua um controle GridView (ID=gdvFunci) e um botão de comando (text=Seleciona) (ID=btnSeleciona);
![]() |
Vamos incluir no projeto o namespace : using System.Data.SqlClient;
A seguir inclua no evento Click do botão , no code-behind, o código abaixo:
|
protected
void
btnSeleciona_Click(object
sender, EventArgs
e)
{ DataContext db = new DataContext(new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename= _C:\\dados\\Cadastro.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")); Table<Funci> tblFunci = db.GetTable<Funci>(); this.GridView1.DataSource = tblFunci; this.GridView1.DataBind();
|
Este código tem o objetivo de obter os dados da tabela Funcionarios e verificar se o mapeamento objeto relacional feito na classe Funci.cs esta correto. Pressionando F5 iremos obter:
![]() |
Com isso nosso objetivo foi alcançado; mostramos que podemos efetuar o mapeamento OR/M usando LINQ to SQL de uma maneira bem simples sem muito código.
Acompanhe a segunda parte deste artigo em :
ASP
.NET - Usando LINQ para manutenção de dados (CRUD)(C#)
...![]()
Referências:
José Carlos Macoratti