ADO .NET - Separando DataSets e TableAdpaters em projetos distintos


No Visual Studio 2005 (Visual Basic 2005 Express Edition) foi introduzido o novo Descritor para o DataSet que gera um TableAdapter para cada DataTable no DataSet.

Esse recurso permite facilmente criar uma camada de dados mas apresentava um grande problema: Os TableAdapters e o DataSet gerados são inseparáveis e isso significa que quando você expõe as suas entidades de negócio no lado do cliente você também expõe a sua camada de acesso a dados com a informação da conexão o que é um grande problema de segurança.

Para contornar esta limitação você tinha que realizar um trabalho extra que dependendo do tamanho do seu projeto podia ser um grande trabalho.

No Visual Studio 2008 (.NEt Framework 3.5) os datasets tipados foram aperfeiçoados de forma que agora os TableAdapters e as classes DataSet podem ser geradas em projetos separados permitindo desta forma que você possa criar camadas separadas em suas aplicações para esses componentes. No VS 2008 você pode especificar no descritor DataSet onde o código de acesso a dados deverá ser gerado e onde colocar o código de validação separando a camada de apresentação do lado do cliente da camada de acesso a dados que

Quando você separa o código do dataset do código do TableAdatper o projeto que irá conter o código do dataset tem que estar localizado na solução atual pois se o projeto não estiver na solução atual ele não estará disponível na lista DataSet Project na janela de propriedades.

Vejamos então como podemos gerar o código do dataset em um projeto que esta separado do projeto que contém o código gerado pelo TableAdapter.

Separando o DataSet do TableAdpater em projetos distintos

Abra o Visual Studio 2008 , eu estou usando a versão trial que pode ser obtida no link:  http://msdn2.microsoft.com/en-us/vstudio/products/aa700831.aspx

Crie um novo projeto do tipo Windows Forms Application e informe o nome App_Customer1 ou outro nome que preferir;

No menu Project selecione Add New Item e na janela Templates selecione DataSet e informe o nome Customer;

Agora vamos incluir um novo projeto na nossa solução a através do menu File - Add - New Project;

A seguir na janela Add New Project selecione o template Class Library e informe o nome App_Customer1_Entities e clique em OK;

Vamos remover o arquivo Class1.vb gerado por padrão do projeto;

Selecione o projeto App_Customer1 novamente,  e, abra o dataset Customer.xsd;

Observe que temos os dois projetos, e que ao selecionar o dataset temos na janela de propriedades a propriedade DataSet Project;

Vamos abrir o Server Explorer e arrastar a tabela Customers para o descritor dataset no projeto App_Customer1;

Em seguida expanda a propriedade DataSet Project e selecione o nome do projeto no qual deseja gerar o código do dataset;

Obs:  propriedade DataSet Project possui duas propriedades: DataSet File e Project Folder;

No nosso exemplo selecionei o projeto App_Customer1_Entities;

Após efetuar a seleção e darmos um Build no projeto , notamos que o código gerado é exibido na propriedade DataSet File com o nome Customer.DataSet.Designer.vb;

O nome gerado na propriedade DataSet File é o nome padrão e pode ser alterado se você desejar.

Se você quiser gerar o código do dataset em um diretório específico basta definir o seu nome na propriedade Project Folder;

Obs: Ao efetuar a separação dos datasets e tableAdapters as classes parciais dos datasets já existentes não serão movidas automaticamente.

Temos assim o  TableAdapter sendo gerado no projeto atual , App_Customer1 ,e , o código do dataset sendo gerado no projeto App_Customer1_Entities.

Observando a nossa solução na janela Solution Explorer temos:

Em um próximo artigo eu vou mostrar como criar um projeto em n-camadas usando o descritor do DataSet.

Aguarde...


José Carlos Macoratti