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