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
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...