 ASP
.NET - Usando LINQ para manutenção de dados (CRUD)(C#)
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;
- 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