ASP .NET - Acessando MySQL com Entity Framework via padrão Repository e exibindo os dados no GridView (VB .NET) - I |
Neste artigo vou criar uma aplicação ASP .NET Web Forms que exibe informações em um controle GridView obtidas de uma base de dados MySQL via Entity Framework usando o padrão Repository. |
Para poder usar os recursos do Entity Framework, como o Entity Data Model, usando uma base de dados MySql você tem que instalar o MySQL for Visual Studio.
A instalação irá preparar o ambiente instalando e atualizando os componentes necessários para integrar o Visual Studio com o MySql e assim poderemos usar os recursos do Entity Framework.
Então se você já tem o MySQL instalado e já tentou usar o Entity Framework para gerar as entidades a partir do MySQL e não conseguiu ainda, faça a instalação do MySql for Visual Studio.
Ao final do processo o MySql Installer irá apresentar os recursos instalados/atualizados :
No nosso exemplo vamos acessar o banco de dados Vendas e a tabela produtos do MySQL:
O objetivo da nossa aplicação deverá acessar o MySql e obter informações da tabela exibindo-as em um controle GridView em um projeto ASP .NET Web Forms.
Vamos então ao trabalho...
Os recursos usados :
Criando o projeto ASP .NET Web Forms no Visual Studio 2015
Abra o VS 2015 Community e crie um novo projeto (File-> New Project);
Selecione a linguagem Visual Basic -> Web e o template ASP .NET Web Application ;
Informe o nome GridView_Tooltip e clique no botão OK;
Escolha a opção Empty e marque Web Forms e não marque mais nada de forma a criar uma aplicação ASP .NET Web Forms totalmente vazia.
No menu Project clique em Add New Item e selecione o template Web Form e informe o nome Default.aspx e clique em Add;
Definindo o modelo de entidades via Entity Framework
No menu Project clique em New Folder e informe o nome Model para criar a pasta no projeto.
Clique com o botão direito do mouse sobre a pasta Model e a seguir em Add -> New Item;
Selecione o item Data e o template ADO .NET Entity Data Model, informe o nome VendasModel e clique no botão Add;
Selecione a opção EF Designer from database pois vamos criar o modelo de entidades a partir de um banco de dados existente no MySql:
Clique no botão Next>;
Na próxima janela do assistente clique no botão New Connection para abrir a janela de conexões e assim podermos selecionar o banco de dados;
Na janela Connection Properties clique no botão Change para selecionar outro banco de dados;
A janela Change Data Source deve apresentar a opção MySQL DataBase. Se a opção não aparecer então houve problemas na instalação do pacote para configurar o ambiente.
Selecione MySQL DataBase e clique em OK;
A seguir informe o nome do seu servidor MySQL , o usuário e a senha;
Selecione a seguir o banco de dados que deseja usar: Vendas.
E clique no botão OK;
A seguir marque a opção para incluir as informações da string de conexão e clique no botão Next>;
Para concluir selecione a tabela (ou tabelas) que deseja usar. Eu vou usar a tabela produtos;
Para concluir clique no botão Finish;
Será criado modelo de entidades mapeando a tabela produtos para as entidades geradas na pasta Model:
Assim temos o modelo de entidades e vamos criar um repositório para centralizar a lógica de acesso a dados.
Criando o Repositório
No menu Project clique em New Folder e informe o nome Repositorio para criar a pasta no projeto.
No menu Project clique em Add New Item e selecione o template Interface e informe o nome IRepositorio.vb
O que é uma interface ? Uma interface, no paradigma da orientação a objetos, é um tipo de classe que contém apenas as assinaturas de métodos, propriedades, eventos e indexadores. A implementação dos membros é feita por uma classe concreta ou struct que implementa a interface. |
A seguir vamos definir o código abaixo neste arquivo:
Imports System.Linq.Expressions
Public Interface IRepositorio(Of T As Class)
Function GetTodos() As IQueryable(Of T)
Function GetPorId(predicate As Expression(Of Func(Of T, Boolean))) As IQueryable(Of T)
End Interface
|
Nesta interface definimos dois métodos que deverão ser implementados:
1- Note que estamos usamos o namespace using System.Linq.Expressions que contém classes e enumerações que permitem representar expressões de código no nível da linguagem como objetos na forma de árvores de expressões;
2- Na assinatura da classe estamos declarando Public Interface IRepositorio(Of T As Class) ; aqui T é uma classe;
3- Function GetTodos() As IQueryable(Of T) - Este método retorna todos os dados como IQueryable; dessa forma podemos retornar a lista e aplicar expressões lambdas para filtrar e classificar os dados;
4- Function GetPorId(predicate As Expression(Of Func(Of T, Boolean))) As IQueryable(Of T) - Retorna os dados que atendem o critério informado em tempo de execução via expressão lambada. Estamos usando o delegate Func, e aplicando o predicate para verificar se o dado atende o critério (retorna true ou false);
Observe que não temos nenhum comando SQL, nenhuma declaração de objetos ADO .NET como connection, command, dataset, datareader, etc.
Já temos o contrato definido e agora vamos definir a classe que irá implementar esse contrato.
Implementando a interface IRepositorio na classe Repositorio
Vamos então criar uma classe chamada Repositorio na pasta Repositorio que irá implementar a nossa interface.
Então selecione a pasta Repositorio no menu Project clique em Add New Item;
Selecione o template Class, informe o nome Repositorio.vb e clique no botão Add;
Vamos definir a assinatura da classe Repositorio conforme o código abaixo:
Public
Class Repositorio(Of T As Class)Note que estamos implementando a interface IRepositorio(Of T) e a interface IDisposable(Of T).
A seguir vemos o código dessa implementação:
Imports System.Linq.Expressions Public Class Repositorio(Of T As Class) Implements IRepositorio(Of T) Implements IDisposable Private Context As vendasEntities Protected Sub New() Context = New vendasEntities() End Sub Private Function IRepositorio_GetTodos() As IQueryable(Of T) Implements IRepositorio(Of T).GetTodos Return Context.Set(Of T)() End Function Private Function IRepositorio_GetPorId(predicate As Expression(Of Func(Of T, Boolean))) As IQueryable(Of T) Implements IRepositorio(Of T).GetPorId Return Context.Set(Of T)().Where(predicate) End Function Private Sub IDisposable_Dispose() Implements IDisposable.Dispose If Context IsNot Nothing Then Context.Dispose() End If GC.SuppressFinalize(Me) End Sub End Class |
Agora vamos detalhar e entender cada método implementado.
Private Context As vendasEntities Protected Sub New() Context = New vendasEntities() End Sub |
Aqui estamos referenciando o contexto representando por vendasEntities na variável Context e criando uma nova instância do contexto. Tudo depende do contexto e vamos usar sua referência em todos os métodos para acessar as entidades no Entity Data Model.
Private Function IRepositorio_GetTodos() As IQueryable(Of T) Implements IRepositorio(Of T).GetTodos Return Context.Set(Of T)() End Function |
O método GetTodos() recebe uma entidade (uma classe) e retorna um IQueryable, ou seja uma lista completa das entidades. (Aqui o método Set(Of T) do contexto retorna uma instância DbSet(Of T) para o acesso a entidades de determinado tipo no contexto.)
Para entender melhor o IQueryable veja o meu artigo : .NET - Comparando IEnumerable com IQueryable.
Private Function IRepositorio_GetPorId(predicate As Expression(Of Func(Of T, Boolean))) As IQueryable(Of T) Implements IRepositorio(Of T).GetPorId Return Context.Set(Of T)().Where(predicate) End Function |
O método GetPorId() usa um delegate Func(Of T) como parâmetro de entrada, onde será usada uma expressão lambda (Ex: p => p.produtoId == Id) como critério, e, um predicate para validar o critério usando a cláusula Where. O retorno será uma lista IQueryable.
Para entender melhor o delegate Func() veja o meu artigo: C# - Apresentando o delegate Func
Na próxima parte do artigo vamos definir a nossa camada de acesso a dados e a camada de negócios.
E disse-lhe Jesus: Eu vim a este mundo
para juízo, a fim de que os que não vêem vejam, e os que vêem sejam cegos.
João 9:39
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#