Por que eu devo ler este artigo:Criação instantânea de uma camada de acesso a dados utilizando a ferramenta Subsonic. Essa camada de acesso a dados contém todo o código necessário para manipular tabelas no BD. Acelerar o desenvolvimento de aplicações utilizando geração automática de código. Aplicações que necessitarem utilizar boas práticas de desenvolvimento, como separação em camadas, utilização de uma DAL (Data Access Layer).

O SubSonic é um conjunto de ferramentas que auxilia a criar a camada de acesso a dados de aplicações, possibilitando um bom ganho de produtividade no desenvolvimento através da geração de classes e por trazer métodos de auxílio poderosos.

Acredito que atualmente a maioria dos projetos de sistemas para computação exijam algum tipo de armazenamento de dados, seja em arquivos texto ou banco de dados, sempre temos a necessidade de guardar informações. Dada essa grande necessidade, sabemos que ter uma camada de acesso a dados (DAL – Data Access Layer, em inglês) bem definida e funcional é um dos pontos principais para o sucesso de um projeto. Neste artigo teremos uma introdução a uma ferramenta que promete facilitar muito a criação das classes de acesso a dados com mínima mão-de-obra.

SubSonic

Podemos classificar o SubSonic como uma ferramenta geradora de camada de acesso a dados multi-banco de dados. Sua essência é ler todas as tabelas de nosso banco de dados e, para cada tabela, criar uma classe correspondente. Cada uma dessas classes já é criada com métodos para listar, inserir alterar ou excluir os registros da tabela correspondente. Além de criar todas as classes automaticamente, o SubSonic vem com um conjunto de classes para consulta de dados muito interessante e prática. Veremos a utilização de algumas dessas classes no decorrer do artigo.

O SubSonic foi criado por Rob Conery e um grupo de outros desenvolvedores. Um ponto positivo para o projeto é que o código-fonte é disponibilizado para download no site, permitindo que outros desenvolvedores, inclusive você, contribua para o amadurecimento do projeto. Até a data da criação desse artigo o SubSonic encontra-se na versão 2.1 Final sendo esta a versão utilizada para o desenvolvimento dos códigos usados nos exemplos.

Como disse anteriormente, o SubSonic trabalha nativamente com alguns bancos de dados, sendo eles: Microsoft SQL Server 2000/2005, MySQL, SQLite e Oracle. Existem implementações para outros bancos de dados como PostGreSQL feita por terceiros.

Baixando e instalando a ferramenta

O Projeto se encontra no Github até da data deste artigo. Acesse o Projeto aqui. Você também encontrar mais informações aqui.

Depois de concluído o download, inicie a instalação clicando duas vezes sobre o arquivo Setup-SubSonic-2.1-Final.exe e escolhendo o diretório de sua preferência. É importante memorizar o caminho onde foi instalado, pois acessaremos a pasta de instalação posteriormente. Na minha máquina (Windows Vista em Inglês) o diretório de instalação é C:\Program Files\SubSonic\SubSonic 2.1 Final.

Configurando o Visual Studio 2008

O SubSonic utiliza um arquivo executável chamado sonic.exe para gerar as classes necessárias para nosso projeto. Essa geração pode ser feita a partir de linha de comando, pelo ASP.NET Build Provider ou através do Visual Studio 2008. Como este é um artigo introdutório, utilizaremos o Visual Studio como ambiente de execução do sonic.exe.

As classes geradas pelo SubSonic ficarão dentro de uma pasta na estrutura do projeto de nossa aplicação. É importante saber disso, pois no momento da geração do código será solicitado o nome da pasta onde o SubSonic criará os arquivos.

Abra o Visual Studio 2008, com o ambiente vazio, vá até o menu Tools à External Tools... e na janela que aparecerá, clique no botão Add e adicione as informações da Tabela 1 em cada uma das caixas de parâmetros.

Parâmetro Valor
Title Gerar Classes SubSonic
Command* C:\Program Files\SubSonic\SubSonic 2.1 Final\SubCommander\sonic.exe
Argument** generate /out Classes
Initial Directory $(ProjectDir)
Use output window Checado
Prompt for arguments Checado

Tabela 1. Parâmetros de execução para geração das classes

  • * Esse caminho pode variar de acordo com o local onde o SubSonic foi instalado.
  • **“Classes” é o nome da pasta de nosso projeto onde ficarão as classes geradas. Podemos alterá-lo posteriormente.

Veja um exemplo de configuração na Figura 1. Depois de inseridos os valores, clique em OK

Configuração do Visual Studio 2008
Figura 1. Configuração do Visual Studio 2008.

A configuração inicial do Visual Studio já está pronta! Poderia encerrar aqui a parte de configuração, mas o SubSonic vem com uma ferramenta fantástica que gera scripts SQL de nossas tabelas para instalação em nossos clientes. Isso facilita muito a vida do desenvolvedor, pois uma das partes “chatas” de um projeto é gerar os scripts de instalação do banco de dados e dos valores iniciais das tabelas. Esse trabalho o SubSonic fará para você! Veja como é simples. Volte ao menu Tools à External Tools... clique em Add e insira os valores mostrados na Tabela 2.

Parâmetro Valor
Title Gerar Scripts SQL
Command* C:\Program Files\SubSonic\SubSonic 2.1 Final\SubCommander\sonic.exe
Argument** version /out ScriptsSQL
Initial Directory $(ProjectDir)
Use output window Checado
Prompt for arguments Checado

Tabela 2. Parâmetros de execução para geração dos scripts de banco de dados.

  • * Lembrando que esse caminho pode variar de acordo com o local onde o SubSonic foi instalado.
  • ** “Classes” é o nome da pasta de nosso projeto onde ficarão as classes geradas. Podemos alterá-lo posteriormente.

Veja um exemplo de configuração na Figura 1. Depois de inseridos os valores, clique em OK

Configuração do Visual Studio 2008
Figura 2. Configuração do Visual Studio 2008.

Clique em OK para finalizar a configuração. Agora que já temos o Visual Studio configurado, vamos criar o nosso banco de dados de exemplo. Criaremos duas tabelas e faremos o relacionamento entre elas. Para o exemplo, utilizaremos o MS SQL Server Express, porém fique à vontade para testar com outros bancos de dados suportados pelo SubSonic. Abra o Management Studio do SQL Express (caso não tenha instalado em sua máquina, você pode baixá-lo do site da Microsoft no endereço http://tinyurl.com/sqlservermgtstudioxps). Crie um banco de dados chamado Locadora_SubSonic. Após criar e selecionar o novo banco de dados, execute o script da Listagem 1.

Analisando nosso banco de dados, percebemos que para cada tabela foi criada uma chave-primária, o SubSonic obrigatoriamente exige que cada tabela tenha uma chave-primária para que ele identifique qual campo será utilizado no momento de operações como deleção de registros ou atualizações. Isso não é uma exigência somente do SubSonic, diversas outras ferramentas, como o NHibernate (apresentado em outras edições da revista) necessitam desse campo. Além da chave-primária, criamos uma chave-estrangeira que utilizaremos em um recurso muito interessante do SubSonic chamado Scaffolding que tem por objetivo criar uma interface de cadastro para nossa tabela automaticamente! Como criamos essa chave-estrangeira, o scaffold criará um DropDownList contendo cada registro da tabela FilmeCategoria. Entraremos em detalhes sobre essa ferramenta mais a frente.

Listagem 1. Criação das duas tabelas usadas no projeto.


/*

Cria a tabela de categorias de filmes juntamente com a sua chave-primária

*/

CREATE TABLE dbo.FilmeCategoria

(

  IdFilmeCategoria INT IDENTITY PRIMARY KEY,

  Descricao VARCHAR(20)

)

 

GO

 

/*

Insere alguns registros na tabela

*/

 

INSERT INTO dbo.FilmeCategoria VALUES ('Ouro')

INSERT INTO dbo.FilmeCategoria VALUES ('Prata')

INSERT INTO dbo.FilmeCategoria VALUES ('Bronze')

 

GO

 

/*

Cria a tabela de filmes juntamente com a sua chave-primária

*/

CREATE TABLE dbo.Filme

(

  IdFilme INT IDENTITY PRIMARY KEY,

  NomeFilme VARCHAR(100),

  IdFilmeCategoria INT,

  Sinopse TEXT

)

 

/*

Cria a chave-estrangeira entre a tabela de filmes e a tabela de categorias

*/

ALTER TABLE dbo.Filme

ADD CONSTRAINT FK_Filme_FilmeCategoria

FOREIGN KEY (IdFilmeCategoria)

REFERENCES dbo.FilmeCategoria (IdFilmeCategoria)

 

/*

Insere alguns filmes na tabela

*/

 

INSERT INTO dbo.Filme VALUES ('Poeira em auto mar', 1, 'Filme muito interessante')

INSERT INTO dbo.Filme VALUES ('As tranças do rei careca', 2, 'Otimo para toda a familia!')

INSERT INTO dbo.Filme VALUES ('A volta dos que não foram', 3, 'Pela primeira vez em sua locadora')

INSERT INTO dbo.Filme VALUES ('Eu, eu mesmo e eu', 1, 'Um filme de auto-analise')

Criando o projeto de exemplo

Abra o Visual Studio 2008, vá no menu File à New à Project. Na janela New Project escolha no TreeView ao lado esquerdo o tipo de projeto Web e na lista de templates à direita, escolha ASP.NET Web Application, digite um nome para o projeto, selecione uma pasta para salvar o projeto e clique em OK. Veja na Figura 3 um exemplo de como foi configurado o projeto exemplo.

Criação do projeto
Figura 3. Criação do projeto.

Agora que temos o projeto criado, vamos configurá-lo para funcionar com o SubSonic. O primeiro é adicionar uma referência ao arquivo SubSonic.dll que está na pasta de instalação do SubSonic, para isso clique no menu Project à Add Reference..., clique na guia Browse e localize a pasta de instalação. A DLL SubSonic.dll está dentro da pasta SubSonic. Selecione o arquivo e clique em OK.

O SubSonic utilizará informações do arquivo web.config para gerar as classes. Abra esse arquivo e insira as linhas da Listagem 2 dentro do elemento <configSections>.

Listagem 2. Linhas utilizadas dentro do elemento <configSections>.

<section type="SubSonic.SubSonicSection, SubSonic" name="SubSonicService" requirePermission="false" />

Veja um exemplo na Figura 4.

Primeira alteração no web.config
Figura 4. Primeira alteração no web.config.

Ainda no web.config, adicione as linhas da Listagem 3 logo abaixo do elemento de fechamento </configSections>.

Listagem 3. Segunda alteração no web.config.

<SubSonicService defaultProvider="SqlDataProvider">

    <providers>

      <add type="SubSonic.SqlDataProvider, SubSonic"

           name="SqlDataProvider"

           generatedNamespace="DAL"

           connectionStringName="stringConexao" />

    </providers>

    </SubSonicService>

A função do código da Listagem 3 é:

  • Dizer para o ASP.NET qual classe e assembly do SubSonic utilizaremos (parâmetro type). Outros podem ser usados, como SubSonic.MySqlDataProvider, SubSonic para o MySQL;
  • Especificar um nome para o provedor de dados utilizado (parâmetro name);
  • Definir o namespace utilizado em nossa camada de acesso a dados (parâmetro generatedNamespace);
  • Especificar a string de conexão utilizada (parâmetro connectionStringName). Podemos criar diversas strings de conexão em nosso web.config.

E para finalizar, adicione as linhas da Listagem 4 dentro do elemento <connectionStrings>

Listagem 3. Segunda alteração no web.config.

<SubSonicService defaultProvider="SqlDataProvider">

    <providers>

      <add type="SubSonic.SqlDataProvider, SubSonic"

           name="SqlDataProvider"

           generatedNamespace="DAL"

           connectionStringName="stringConexao" />

    </providers>

    </SubSonicService>

A função do código da Listagem 3 é:

  • Dizer para o ASP.NET qual classe e assembly do SubSonic utilizaremos (parâmetro type). Outros podem ser usados, como SubSonic.MySqlDataProvider, SubSonic para o MySQL;
  • Especificar um nome para o provedor de dados utilizado (parâmetro name);
  • Definir o namespace utilizado em nossa camada de acesso a dados (parâmetro generatedNamespace);
  • Especificar a string de conexão utilizada (parâmetro connectionStringName). Podemos criar diversas strings de conexão em nosso web.config.

E para finalizar, adicione as linhas da Listagem 4 dentro do elemento <connectionStrings>.

Listagem 4. String de conexão com banco de dados.

<clear/>

<add name="stringConexao"

 connectionString="server=.\SQLEXPRESS; database=Locadora_Subsonic; persist security info=true; integrated security=sspi;"

 providerName="System.Data.SqlClient"/>

Observe a utilização do elemento <clear />, ele serve para informar que o nosso projeto não utilizará as strings de conexão definidas pelo próprio ASP.NET (considere isso como uma boa prática).

Veja no destaque da Figura 5, como ficará a string de conexão. Observe que o nome dado para nossa conexão é stringConexao, o mesmo nome utilizado no elemento <SubSonicService>, você poderá alterar para o nome que ficar mais adequado ao seu projeto, desde que seja alterado nos dois elementos (<connectionString> e <SubSonicService>).

Exemplo da string de conexão
Figura 5. Exemplo da string de conexão

Pronto, terminamos a configuração do arquivo web.config! Crie uma pasta em seu projeto chamada Classes. Dentro dessa pasta ficarão todos os arquivos gerados pelo SubSonic. Crie uma segunda pasta chamada ScriptsSQL. A estrutura do projeto ficará como na Figura 6.

Estrutura do projeto
Figura 6. Estrutura do projeto.

Infelizmente os arquivos que o SubSonic gera ficam ocultos no projeto. Para termos acesso a esses arquivos, clique no menu Project à Show All Files.

Com o projeto configurado, web.config alterado e exibindo arquivos ocultos, começaremos a festa!

Vamos fazer o SubSonic gerar as classes de acesso a dados a partir das nossas tabelas.

Execute o seu projeto pressionando a tecla F5 (caso seja solicitada alguma alteração no web.config para ativar o Debug, clique em Ok), se tudo estiver configurado corretamente, a página default.aspx será exibida em branco.

Pare a execução do seu projeto, selecione o seu projeto no Solution Explorer e vá até o menu Tools à Gerar Classes SubSonic. Se todos os passos anteriores foram seguidos, será exibida a tela da Figura 7.

Tela para geração das classes
Figura 7. Tela para geração das classes.

Clique em OK e observe na Output Window o resultado da execução. Caso esteja tudo certo, será exibida a palavra Done! e também o tempo gasto para gerar as classes. Em poucos segundos um trabalho que demoraria horas foi feito!

Vá até a pasta Classes e veja que para cada tabela algumas classes foram criadas, além de outras específicas. Caso não esteja aparecendo, clique no botão Refresh.

Um ponto importante a observar é que cada vez que alterarmos a estrutura de nosso banco de dados (criação de novas tabelas, colunas etc.) devemos executar o processo de geração novamente.

Uma dica importante: como toda vez que executamos o processo de geração de classes, as classes anteriores são apagadas, não é interessante incluirmos código personalizado nas estruturas geradas. Caso o leitor sinta a necessidade de criar métodos personalizados, utilize o recurso de Partial Classes, pois todas as classes geradas vêm marcadas como partial.

O recurso Partial Classes foi lançado na versão 2.0 do .NET Framework. É um recurso muito interessante, pois permite que existam duas classes com o mesmo nome (desde que ambas sejam do tipo Partial) dentro do projeto e com métodos diferentes entre elas. Durante a execução, o compilador do .NET agrupa todas as classes com o mesmo nome e marcadas como Partial em uma única estrutura.

As classes geradas estão em cores mais claras (papéis em branco), isto porque não pertencem ainda ao nosso projeto, um exemplo pode ser visto na Figura 8.

Classes geradas que não foram incluídas no projeto
Figura 8. Classes geradas que não foram incluídas no projeto.

Para incluir as classes no projeto, selecione todos os arquivos utilizando a tecla Control. Depois de selecionados, clique com o botão sobre um dos arquivos e no menu de contexto, selecione a opção Include in Project (Figura 9).

Inclusão das classes no projeto
Figura 9. Inclusão das classes no projeto.

Gerando Scripts do banco de dados

Um recurso extremamente útil para nós desenvolvedores é a utilização de scripts SQL para criação das mesmas tabelas no banco de dados de nossos clientes, por exemplo. Para geração desse script, selecione o seu projeto no Solution Explorer, vá até o menu Tools àGerar Scripts SQL. Novamente uma pequena janela será exibida, clique em OK e aguarde alguns instantes. Os passos da criação do script serão exibidos na Output window do Visual Studio. No Solution Explorer selecione a pasta ScriptsSQL e clique no botão Refresh.

Observe que foram gerados dois arquivos: um com a estrutura das tabelas e outro com os dados que foram inseridos inicialmente. Os arquivos gerados não foram incluídos no projeto, selecione os dois arquivos, clique com o botão direito do mouse sobre eles e escolha Include in Project. Mais uma vez o SubSonic nos faz economizar muito tempo com geração de código! É importante observar que o Subsonic ainda não trabalha com a geração de scripts para o SQL Server 2008 (versão 10).

Escrevendo consultas

O SubSonic contém um poderoso mecanismo para geração de consultas. Conheceremos a seguir alguns desses recursos. Abra a página default.aspx e adicione um GridView. Clique duas vezes na página e no evento Page_Load() digite o código da Listagem 5.

Listagem 5. Consulta usando o objeto Query do SubSonic.

//Instanciamos o objeto Query do SubSonic para que a consulta seja feita na tabela "Filme" onde o campo IdFilmeCategoria seja igual a 1

GridView1.DataSource = new SubSonic.Query("Filme")

.WHERE(DAL.Filme.Columns.IdFilmeCategoria, SubSonic.Comparison.Equals, 1)

.ExecuteReader();

 

GridView1.DataBind();

Rode projeto e veja que os dados são exibidos. Outra forma de executar a listagem da tabela Filmes é utilizando o código da Listagem 6.

Listagem 6. Retornando um DataSet a partir da tabela.

//Neste caso estamos efetuando a consulta na tabela "Filme" e retornando um DataSet

GridView1.DataSource = SubSonic.Select.AllColumnsFrom<DAL.Filme>()

.Where("IdFilmeCategoria")

.IsEqualTo(1).ExecuteDataSet();

 

GridView1.DataBind();

Rode projeto e veja que os dados são exibidos da mesma forma no gridview. A Listagem 7 exibe como fazer um Inner Join entre as tabelas e mostra como utilizar parâmetros em consultas. Veja que neste exemplo utilizamos diretamente a cláusula SELECT do SQL.

Listagem 7. Inner Join e parâmetros em consultas.

//Usando a classe QueryCommand podemos criar consultas usando Joins e parâmetros. O segundo valor passado para o construtor é o tipo de provedor de dados

SubSonic.QueryCommand comando = new SubSonic.QueryCommand("SELECT F.IdFilme, F.NomeFilme, FC.Descricao FROM Filme AS F JOIN FilmeCategoria AS FC ON FC.IdFilmeCategoria = F.IdFilmeCategoria WHERE F.IdFilmeCategoria = @IdCategoria", "SqlDataProvider");

 

//Adicionando o valor 1 como parâmetro da consulta

comando.AddParameter("@IdCategoria", 1, System.Data.DbType.Int32);

 

//Executa o comando no banco de dados e retorna um DataSet que será exibido no GridView

GridView1.DataSource = SubSonic.DataService.GetDataSet(comando);

 

GridView1.DataBind();

Rode projeto e veja que a consulta customizada é exibida no gridview. Para finalizar a parte de consultas, na Listagem 8 encontramos uma nova forma de fazer Joins entre tabelas.

Listagem 8. Inner Join entre tabelas.

//Passamos para o método Select da classe DB os campos desejados. No método From, informamos o nome da primeira tabela. No método InnerJoin dizemos quais colunas serão relacionadas (IdFilmeCategoria das tabelas Filme e FilmeCategoria). Adicionamos a cláusula WHERE para trazer somente os filmes cuja IdFilmeCategoria seja igual a 1

GridView1.DataSource =

DAL.DB.Select("Filme.IdFilme, Filme.NomeFilme,FilmeCategoria.Descricao")

.From(DAL.Filme.Schema.Name).InnerJoin(DAL.FilmeCategorium.IdFilmeCategoriaColumn, DAL.Filme.IdFilmeCategoriaColumn).Where("IdFilmeCategoria").IsEqualTo(1).ExecuteReader();

 

GridView1.DataBind();

Ao rodar o projeto veja que o inner join funciona perfeitamente e os dados são exibidos no gridview.

Inserindo, alterando e removendo registros

De uma forma muito simples (assim como nas consultas) podemos inserir alterar ou remover dados em nossas tabelas. Cada classe gerada pelo SubSonic contém métodos que executam cada uma das operações descritas. As classes seguem um padrão de projeto chamado ActiveRecord, onde cada instância da classe representa uma linha da tabela no banco de dados.

Insira um botão de comando logo abaixo do objeto GridView1, mude a propriedade Text do botão para “Inserir”, clique duas vezes sobre o botão e adicione o código da Listagem 9.

Listagem 9. Inserindo registros em nossa tabela de filmes.

//Declara dois objetos do tipo Filme

DAL.Filme filme1 = null;

DAL.Filme filme2 = null;

 

//Inicializa o primeiro filme, define o valor para os campos e logo em seguida salva o novo registro

filme1 = new DAL.Filme();

filme1.IdFilmeCategoria = 1;

filme1.NomeFilme = "Um novo filme";

filme1.Sinopse = "Pela primeira vez na televisão";

filme1.Save();

 

//Cria o segundo filme e salva no banco de dados

filme2 = new DAL.Filme();

filme2.IdFilmeCategoria = 1;

filme2.NomeFilme = "Mais um novo filme";

filme2.Sinopse = "Alugue, filme muito bom!";

filme2.Save();

 

//Redireciona para a mesma página, atualizando o GridView com os novos registros

Response.Redirect("default.aspx");

Execute o projeto e clique no botão, veja que após o processamento duas novas linhas foram exibidas no GridView.

Para alterar um dos registros já salvos em nossa tabela, primeiramente devemos carregá-lo em memória, depois alteramos os valores das propriedades e, por fim, executamos o método Save() para gravar as alterações efetuadas. Insira um novo botão ao lado do botão Inserir, mude a propriedade Text do novo botão para Alterar, clique duas vezes sobre o botão e digite o código da Listagem 10.

Listagem 10. Alterando um registro de nossa tabela.

//Declaramos uma variável do tipo Filme que representa uma linha de nossa tabela

DAL.Filme filme = new DAL.Filme();

 

//Utilizamos o método LoadByKey para carregar o registro da tabela Filme cujo código seja igual a 1

filme.LoadByKey(1);

 

//Verifica se o registro foi encontrado

if (filme.IdFilme != 0)

{

 //Caso tenha sido encontrado, vamos alterar as prop. do registro

 filme.NomeFilme = "FILME ALTERADO 123";

 filme.Sinopse = "Teste de alteração feita em um filme";

 

 //Agora salvamos as alterações

 filme.Save();

}

 

//Redireciona para a mesma página, atualizando o GridView com a alteração

Response.Redirect("default.aspx");

Execute o projeto novamente e clique no botão Alterar. Note que o registro foi alterado.

Crie um terceiro botão de comando, mude a propriedade Text para Excluir e digite o código da Listagem 11 no endereçador do clique. Veja na listagem como é simples a exclusão de um registro. Neste momento estamos excluindo o registro de número 4, caso o registro não existisse, nada aconteceria. Rode então o projeto e confira o resultado.

Listagem 11. Excluindo um registro da tabela.

//A classe Filme contém um método estático chamado Delete que remove o registro simplesmente indicando o código da chave-primária

DAL.Filme.Delete(4);

 

//Redireciona para a mesma página, atualizando o GridView

Response.Redirect("default.aspx");

Usando o Scaffolding

Nas etapas anteriores digitamos algumas linhas de código para manipular os dados de nossa tabela de filmes. Mesmo sendo pouco código, tivemos que digitar vários comandos. Que tal criar uma interface completa de cadastro com apenas 1 linha de código? Essa é a idéia do componente Scaffold que faz parte da arquitetura do SubSonic. Este componente gera, em tempo de execução, todo código necessário para incluir, alterar, excluir e listar os registros de nossa tabela.

Adicione mais uma página ao projeto através do menu Project à Add New Item..., selecione o template Web Form, digite o nome Scaffold_Filme.aspx e clique em OK. Defina a nova página como página principal do projeto. Clique com o botão direito do mouse na nova página no Solution Explorer do Visual Studio e selecione a opção Set as Start Page.

Após ter inserido a página e definido a mesma como principal, mude a visualização para Source utilizando o botão que se encontra no rodapé do Visual Studio (Figura 10).

Mudando a visualização da página
Figura 10. Mudando a visualização da página.

Como já estamos com a visualização do código ASPX de nossa página aberta, vamos aproveitar e inserir a referência ao assembly do SubSonic em nossa página. Posicione o cursor na linha abaixo da diretiva e digite a linha que está na Listagem 12.

Listagem 12. Referenciando o SubSonic na página.

<%@ Register assembly="SubSonic" namespace="SubSonic" tagprefix="subsonic" %>

O parâmetro assembly diz para o ASP.NET qual arquivo será carregado (no caso o SubSonic.dll), o parâmetro namespace especifica qual namespace estaremos utilizando (lembrando que dentro de um assembly podem existir diversos namespaces) e o parâmetro tagprefix determina qual será o nome da Tag ASPNET que utilizaremos no decorrer da página.

Um pouco mais abaixo temos o elemento <div>...... </div>. Dentro desse elemento é que criaremos o nosso componente Scaffold. Insira dentro do elemento <div> o código da Listagem 13.

Listagem 13. Componente Scaffold.

<subsonic:Scaffold runat="server"

               ID="sfFilme"

               TableName="Filme">

    </subsonic:Scaffold>

Execute o projeto e veja que com apenas uma linha de comando o SubSonic criou um botão Add (Adicionar) e um GridView completamente funcional!

Clique no botão Add, e veja que instantaneamente será criado um formulário para cadastro de novos filmes. Até o momento da criação deste artigo, não foi disponibilizado pelo criador da ferramenta nenhum arquivo para fazer a localização (tradução) dos textos que estão em inglês. Como o SubSonic é distribuído com o código-fonte, fica aqui o desafio ao leitor de criar uma extensão para traduzir o componente Scaffold para outros idiomas (como português, por exemplo).

O DropDownList foi criado no formulário, pois no momento da criação da tabela Filmes definimos uma chave-estrangeira através do comando ALTER TABLE dbo.Filme

Conclusão

Este artigo mostrou de forma rápida e sucinta a utilização de diversos recursos do SubSonic. Existem diversos outros recursos interessantes nesta ferramenta, mas estão fora do escopo deste artigo. Explorem bem as opções apresentadas aqui e poupe diversas horas de codificação em seu projeto.

Com tantas ferramentas disponíveis (SubSonic, LINQ to SQL e NHibernate) cabe ao leitor decidir qual delas melhor se adapta ao projeto, lembrando que todas são ferramentas de produtividade, mas têm características diferentes.

Confira também