No artigo anterior vimos o que é O/R M e como ele funciona. Neste artigo veremos como criar um programa fazendo uso de O/R M com a ferramenta LLBLGen Pro 2.0, SQL Server 2000 e Visual Studio 2005.

 

Para que possamos usufruir de todos os benefícios de O/R M faz-se necessário ter um banco de dados bem estruturado e definido, pois a ferramenta criará uma biblioteca O/R M fazendo o mapeamento de todas as tabelas, com seus campos, respectivos tipos de dados e seus relacionamentos.

 

Com a intenção de pouparmos a extensão do artigo, faremos uso de um banco de dados já definido e conhecido pela a maioria, o Nortwind.

 

Criando a biblioteca O/R M

O primeiro passo é baixar o LLBLGen no site www.llblgen.com e depois instalá-lo.

 

Feito a instala√ß√£o, execute o LLBLGen  para que criemos a biblioteca O/R M do banco de dados Northwind.

 

No menu de op√ß√Ķes escolha File, depois New. Ser√° apresentada a janela Create New Project. Preenche-a intuitivamente como a figura abaixo, trocando as configura√ß√Ķes de banco de dados conforme a realidade do seu cen√°rio, s√≥ n√£o deixe de selecionar apenas o banco de dados Northwind em Catalog(s) to use.

 

Janela Create New Project

 

Clique no bot√£o Create e ser√° apresentado a seguinte Janela.

 

Janela principal do LLBLGen

 

Ao criar um projeto, o LLBLGen permite criar quatro tipos de objetos:

Etities: S√£o objetos (Classes) que representam as tabelas do banco de dados, com toda sua estrutura (Campos, Relacionamentos, √ćndices etc).

Typed Lists: S√£o objetos (DataTables Tipados) que representam uma query criada graficamente pela IDE do LLBLGen.

Typed Views: S√£o objetos (DataTables Tipados) que representam uma view definida no banco de dados.

Stored Procedure Calls: São métodos (com ou sem retorno) que representam chamadas de stored procedures definidas no banco de dados.

 

Neste artigo iremos utilizar somente os objetos entities, para mais informa√ß√Ķes sobre os outros objetos, consulte a documenta√ß√£o (Help) do LLBLGen

 

O nosso projeto foi criado, a ferramenta já leu toda a estrutura do banco de dados, agora temos que definir quais tabelas estarão disponíveis para uso. No Project Explorer clique com botão direito do mouse sobre Entities e escolha a opção Add New Entities Mapped On Tables From Catalog(s). Será apresentada a seguinte janela

Janela New Entities found

 

Selecione todas as entidades (tabelas) e clique no bot√£o Add to project

No Project Explorer é possível notar que foram criadas todas as entities e seu s atributos.

 

Feito isso, a nossa biblioteca já estará definida e teremos apenas que gerar o código.

Para tal, clique no menu Project e depois em Generate.

Janela Configure the Code generation process

 

Target language : Linguagem a qual ser√° gerada a biblioteca

Target plataform : Plataforma a qual ser√° gerada a biblioteca (Pode-se optar por compact framework para projetos smart devices)

Root namespace : Namespace do projeto

Template Group: Escolhendo SefServicing a própria Entity terá a lógica para persistência dos dados, enquanto Adapter requer um objeto ( DataAcessAdapter ) para fazer a persistência dos dados.

Destination root folder : Diretório em que será gerado o código

 

Para mais informa√ß√Ķes consulte a documenta√ß√£o do LLBLGen

 

Defina o campo Destination root folder conforme seu cen√°rio e os outros campos conforme figura e clique em Start generator

 

Aparecerá a tela de confirmação

 

Clique no bot√£o Close

 

Pronto! A biblioteca O/R M j√° foi gerada e j√° podemos fazer uso dela.

 

Usando a Biblioteca O/R M em um programa .Net

Pelo windows explorer é possível verificar os arquivos e pastas gerados pelo LLBLGen, é só abrir a pasta informada no campo Destination Root Folder.

Você deverá possuir uma estrutura como esta

Windows explorer visualizando pasta do projeto

 

Abra o arquivo Microsoft.Samples.Northwind.vbproj.

Na Solution Explorer você poderá notar toda estrutura criada para sua biblioteca O/R M. Aproveite para explorar o código gerado pela ferramenta, mas não se atenha a complexidade dele, pois na verdade, você nem precisaria ver o código gerado.

Enfim vamos testar nossa biblioteca O/R M, para isso adicione um novo projeto Windows Application Chamado WinNorthwindORM. Depois de criado o projeto, na Solution Explorer, clique sobre ele com o bot√£o direito do mouse e escolha Set as StartUp Project.

 

 

Solution Explorer para o projeto WinNorthWindORM

 

Novamente na Solution Explorer clique sobre o projeto WinNorthwindORM com o bot√£o direito do mouse e escolha Add References. Localize e selecione a guia Projects, depois escolha o projeto Microsoft.Samples.Northwind e clique em OK

Janela Add References

 

Para fazermos uso das bibliotecas O/R M é necessário utilizamos um framework que possua a lógica de persistência dos dados, deste modo teremos que adicionar referência ao framework do LLBLGen. Novamente na Solution Explorer clique sobre o projeto WinNorthwindORM com o botão direito do mouse e escolha Add References. Localize e selecione a guia .Net, depois escolha o component LLBLGen Pro .Net 2.0ORM Support Class Library e clique em OK

 

Janela Add References

O projeto WinNorthwindORM, por padrão, foi criado com um formulário chamado Form1, assim vamos utiliza-lo como interface para manipulação das categorias e seus repectivos produtos no banco de dados northwind. Para tal, configure o Form1 conforme figura abaixo.

Formul√°rio Form1

 

Note: O Form1 possui dois groupbox(grbCategorias, grbProdutos), cada groupbox com um textbox(txtCategoria, txtProduto), um button (btnAdicionarCategoria, btnAdicionarProduto) e um listbox (lstCategorias e lstProdutos)

 

Para que a Biblioteca de O/R M saiba qual o banco de dados a ser usado é necessário adicionar um arquivo de configuração App.Config e adicione a seguinte chave na seção configuration

 

  <appSettings>

    <add key="Main.ConnectionString" value="data source=(local);initial catalog=Northwind;integrated security=SSPI;persist security info=False;packet size=4096"/>

  </appSettings>

 

Note: A chave deve ser configurada conforme seu cenário e a chave Main.ConnectionString pode ser alterada para outro nome na janela de configuração de projeto no LLBLGen

 

 

Enfim, podemos codificar!

Prepare o código do seu formulario deste modo

 

REM Namespaces da biblioteca O/R M

Imports Microsoft.Samples.Northwind.EntityClasses

Imports Microsoft.Samples.Northwind.CollectionClasses

Public Class Form1

    REM Objetos de cole√ß√£o de entidades

    Private Produtos As ProductsCollection

    Private Categorias As New CategoriesCollection

 

    REM Procedimento para savar Category no bando de dados

    Private Sub SaveCategory(ByVal CategoryName As String, ByVal Description As String)

        REM Cria objeto

        Dim NovaCategoria As New CategoriesEntity()

        REM Atribui valores ao objeto

        NovaCategoria.CategoryName = CategoryName

        NovaCategoria.Description = Description

        REM Salva informa√ß√Ķes no banco de dados

        NovaCategoria.Save()

    End Sub

    Private Sub SaveProdutct(ByVal CategoryId As Integer, ByVal ProductName As String)

        REM Cria objeto

        Dim NovoProduto As New ProductsEntity()

        REM Atribui valores ao objeto

        NovoProduto.CategoryId = CategoryId

        NovoProduto.ProductName = ProductName

        NovoProduto.Discontinued = False

        REM Salva informa√ß√Ķes no banco de dados

        NovoProduto.Save()

    End Sub

    REM Procedimento para mostrar categorias

    Private Sub ShowCategories()

        Me.Categorias.GetMulti(Nothing)

        Me.lstCategorias.ValueMember = "CategoryId"

        Me.lstCategorias.DisplayMember = "CategoryName"

        Me.lstCategorias.DataSource = Me.Categorias

    End Sub

    REM Procedimento para mostrar produtos

    Private Sub ShowProducts()

        Dim Index As Integer = lstCategorias.SelectedIndex

        If Index >= 0 Then

 

            Me.Produtos = Me.Categorias(Index).GetMultiProducts(True)

 

            Me.lstProdutos.ValueMember = "ProductId"

            Me.lstProdutos.DisplayMember = "ProductName"

            Me.lstProdutos.DataSource = Me.Produtos

        Else

            Me.lstProdutos.DataSource = Nothing

        End If

    End Sub   

End Class

 

Feito isso, precisamos apenas programar os eventos de nossos controles

 

Para o evento load do Form1 codifique

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Me.ShowCategories()

    End Sub

 

 

Para o evento SelectedValueChanged do listbox de categorias codifique

    Private Sub lstCategorias_SelectedValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstCategorias.SelectedValueChanged

        Me.ShowProducts()

    End Sub

 

Para o evento Click do bot√£o de adicionar categorias codifique

    Private Sub btnAdicionarCategoria_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdicionarCategoria.Click

        Me.SaveCategory(txtCategoria.Text, "")

        Me.ShowCategories()

    End Sub

   

Para o evento Click do bot√£o de adicionar produtos codifique

    Private Sub btnAdicionarProduto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdicionarProduto.Click

        Dim Index As Integer = lstCategorias.SelectedIndex

        If Index >= 0 Then

            Dim CategoryId As Integer = Convert.ToInt32(lstCategorias.SelectedValue)

            Me.SaveProdutct(CategoryId, txtProduto.Text)

        End If

    End Sub

 

Feito isso o projeto já está pronto! Agora só rodar o programa

 

Conclus√£o

O/R M é um novo conceito nada dificil de implementar e pode-se diminuir muito tempo de desenvolvimento, além de diminuir a complexidade do código e eliminar a necessidade de escrever comandos T-SQL.

 

Espero que tenha gostado do LLBLGen e acima de tudo, O/R M.

 

Aguardo seu coment√°rio...