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