ASP .NET - LINQ To SQL e Stored Procedures II


No meu primeiro artigo ASP .NET - LINQ To SQL e Stored Procedures I criei uma aplicação ASP .NET usando o método tradicional onde definimos o banco de dados , a tabela e as stored procedures.

Em seguida criei a camada de acesso a dados - DAL - onde defini os métodos para acesso e manutenção dos dados, e, por último, criei a camada de negócio - BAL - contendo os membros , propriedades e métodos da aplicação.

A camada de apresentação é composta de um componente GriView que exibe os dados da tabela Emails permitindo também a edição dos registros e de um componente FormView onde efetuamos a inclusão de novos registros.

Embora seja bem simples, a aplicação possui uma estrutura clássica baseada em camadas com utilização de stored procedures.

O que vamos fazer agora ?

Usar LINQ To SQL...

Neste artigo eu mostrar como podemos usar os recursos do LINQ para nos ajudar a efetuar o acesso e a manutenção das informações substituindo a camada de acesso a dados, de maneira que não vou precisar me preocupar com a conexão e os objetos de acesso a dados visto que,  através do mapeamento objeto relacional feito no descritor LINQ, teremos acesso, via consultas LINQ a todos os recursos necessários para efetuar essas tarefas de manutenção de dados.

Apenas para lembrar temos abaixo a figura apresentando o projeto criado no artigo anterior onde podemos notar as camadas de negócio - BAL,  e, de acesso a dados - DAL.

Através do mapeamento objeto Relacional- O/R -  vamos substituir toda a camada de acesso a Dados - DAL , e, iremos criar novamente os métodos da camada de negócio - BAL - usando consultas LINQ.

Vamos portanto abrir o projeto CadEmails criado anteriormente e excluir a camada de acesso a dados e limpar todo o código presente na camada de negócio - BAL.

Vamos excluir também o objectDataSource que chamamos de oCadEmailDS pois iremos criar um novo objectDataSource usando as consultas LINQ que iremos criar na camada BAL.

Vamos começar criando o mapeamento objeto Relacional via Descritor LINQ que irá substituir a nossa camada de acesso a dados. No menu Web Site selecione Add New Item e a partir da janela Add New Item selecione o template LINQ To SQL Classes e informe o nome CadEmails.dbml clicando no botão Add;

A seguir abra a janela Database Explorer e localize a conexão com o banco de dados Escola.mdf , expanda os objetos e em seguida arraste a tabela Emails e as stored procedures para o descritor LINQ no Panel Methods , conforme a figura abaixo:

Agora vamos definir novos métodos em nossa camada de negócio - BAL - usando a consultas LINQ. Digite o código abaixo na classe BAL na pasta App_Code:

Public Class BAL
    Public Shared Function selecionaTodos() As List(Of sp_SelectAllEmailsResult)
        Dim db As New CadEmailsDataContext
        Dim emails = From e In db.sp_SelectAllEmails
        Return emails.ToList()
  End Function

  Public Shared Sub incluirEmails(ByVal alunoNome As String, ByVal alunoEmail As String, ByVal ativo As Boolean, ByVal alunoID As Integer)
        Dim db As New CadEmailsDataContext
        db.sp_InsertEmails(alunoNome, alunoEmail, ativo, alunoID)
  End Sub
    Public Shared Sub atualizaEmails(ByVal alunoID As Integer, ByVal alunoNome As String, ByVal alunoEmail As String, ByVal ativo As Boolean)
        Dim db As New CadEmailsDataContext
        db.sp_UpdateEmails(alunoID, alunoNome, alunoEmail, ativo)
    End Sub

    Public Shared Sub deletaEmails(ByVal alunoID As Integer)
        Dim db As New CadEmailsDataContext
        db.sp_DeleteEmails(alunoID)
    End Sub
End Class

Na camada de negócios representada pela classe BAL temos 4 métodos criados usando os recursos disponíveis pelo mapeamento O/R LINQ:

  1. - selecionaTodos - que retorna uma lista de todos os dados da tabela Emails que usa a consulta LINQ : From e In db.sp_SelectAllEmails onde sp_SelectAllEmails é a stored procedure criada.
  2. - incluirEmails - que inclui dados na tabela Emails usando o método sp_InsertEmails()
  3. - atualizaEmails - que atualiza os dados da tabela via método sp_UpdateEmails
  4. - deletaEmails - que excluir dados da tabela Emails usando o método sp_DeleteEmails()

Em todos os métodos note que instanciamos um objeto CadEmailsDataContext :  Dim db As New CadEmailsDataContext -  através do qual temos acesso aos mapeamentos realizados no descritor LINQ.

Perceba que o código ficou bem mais enxuto do que o existente anteriormente na camada BAL pois não temos que nos preocupar com a conexão com os provedores , datasets, datareaders, etc...

Agora vamos voltar a interface e criar novamente o objetoDataSource apontando para os métodos criados.

Inclua a partir da ToolBox , guia Data , um componente ObjectDataSource no projeto adotando o nome padrão. Selecione o objeto e clique no link Configure DataSource;

Na janela Choose a Business Object selecione a nossa camada de negócios representada pela classe BAL e clique no botão Next>

Agora em cada uma das guias selecione na combo - Choose a method - o método correspondente a ação declarada na guia:

Ao terminar clique no botão Finish.

Selecione o componente GridView e verifique se a sua propriedade DataKeyNames esta definida para AlunoID. Se não estiver defina a propriedade para este valor.

Atribua o componente ObjectDataSource1 criado aos componentes GridView e FormView.  Execute o projeto web e você verá a interface idêntica a do primeiro artigo , funcionando da mesma forma , com uma diferença : agora estamos usando LINQ to SQL.

Simples, rápido e funcional: LINQ to SQL. 

Pegue o projeto completo aqui: cadEmailsLINQ.zip

referências:


José Carlos Macoratti