Entity Framework 6 - Aplicação em camadas - Definindo o modelo e criando a solução


 Neste artigo vamos criar uma solução que acessa um banco de dados SQL Server usando uma camada de acesso a dados usando o padrão repositório e o Entity Framework 6. Vamos realizar a separação das classes do nosso modelo gerado no Entity Data Model de forma que a camada de apresentação não precise referenciar o projeto onde temos o Entity Data Model.

Você já deve conhecer os benefícios de utilizar uma arquitetura em camadas em seu projeto. Não tenha dúvidas, para a maioria dos cenários onde temos que acessar um banco de dados relacional, a arquitetura em camadas é um dos melhores padrão de projeto para o desenvolvimento de software.

Em uma arquitetura em camadas temos a separação das responsabilidades do nosso código pela formação de diferentes camadas como : Camada de Apresentação, Camada de Negócios, Camada de Serviços, Camada de Entidades e Camada de Acesso a dados.

Geralmente em uma arquitetura em camadas a camada de negócios (BLL - Businnes Logic Layer) acessa diretamente os dados a partir da camada de acesso aos dados. Dessa forma nossa Camada de Acesso aos Dados (DAL - Data Access Layer)  esta fortemente acoplada a várias fontes de dados e também à camada de negócios. Isso resulta em dificuldades para testar a camada de negócios aumentando o trabalho para isolar a camada de dependências externas e pode levar a erros.

Uma solução é utilizar um repositório entre as camadas de negócio e a de acesso a dados.  Quando usamos o Entity Framework, muitas vezes definimos um acesso público ao nosso modelo de entidades para facilitar sua utilização mas isso dá o acesso direto ao nosso modelo de dados ao mundo externo, e, de acordo com as boas práticas, a fonte de dados não deveria ser diretamente visível a camada de negócios e por isso o padrão repositório entra em cena.

O padrão repositório encapsula as fontes de dados ou modelo de dados e permite o acesso ao banco de dados através de métodos genéricos.

É isso que iremos mostrar e construir nessa série de artigos usando uma abordagem DataBase First. Então ao trabalho...

Recursos usados

Definindo o modelo de dados

Neste artigo eu vou usar o Entity Framework e a abordagem DataBase First e neste caso vamos usar o banco de dados Cadastro.mdf do SQL Server 2012 Express.

Podemos usar as seguintes abordagem com o Entity Framework :
    1 - Code First - Criamos classes POCO que são mapeadas para as entidades;
    2 - Database First - Mapeamos para um Banco de dados que já existe;
    3 - Model First -  Criamos o Modelo conceitual primeiro e depois é gerado o script para criar o banco de dados;

Neste banco de dados vamos usar as tabelas Departamentos e Empregados que possuem as seguintes estruturas:

 Departamentos
 Empregados

Temos aqui um relacionamento Um-para-Muitos entre a tabela Departamentos e a tabela Empregados:

Criando a solução e a camada de acesso a dados - DAL

Abra O Visual Studio 2013 Express for Windows desktop e clique em Visual Studio Solutions e a seguir em Blank Solution;

Informe o nome da solução como EF6_Repositorio e clique no botão OK;

Agora vamos criar um novo projeto em nossa solução. Clique no menu FILE e a seguir em Add -> New Project;

Selecione a linguagem C# e o template Class Library e informe o nome DAL. A seguir exclua o arquivo Class1.cs criado por padrão.

Vamos criar um Entity Data Model no projeto DAL. Selecione o projeto e Clique em  PROJECT -> Add New Item;

Selecione a guia Data e o template ADO .NET Entity Data Model, informe o nome Cadastro e clique no botão Add;       

No assistente selecione a opção EF Designer from database e clique no botão Next>;

Selecione a conexão com o banco de dados Cadastro.mdf (Se ele ainda não existir clique em New Connection e defina a conexão);

Aceite as configurações do assistente que salva a string de conexão no arquivo App.Config e cria o contexto CadastroEntities;

Clique no botão Next>;

Selecione a opção Entity Framework 6.x e clique no botão Next>;

A seguir selecione as tabelas Departamentos e Empregados e marque as opções conforme a figura abaixo clicando no botão Finish para concluir essa etapa:

Será gerado o modelo de entidades conforme a figura abaixo:

Temos aqui as entidades Departamento e Empregado mapeadas para as respectivas tabelas.

Note que no Entity Data Model - Cadastro.edmx podemos ver as classes :

Nossa próxima tarefa será separar as entidades Cadastro.cs, Departamento.cs e Empregado.cs do modelo de entidades - Cadastro.edmx.

E porque temos que fazer isso ?

Fazendo isso poderemos usar essas entidades nas diferentes camadas da nossa solução.

Além disso é uma boa prática ter a nossa lógica de domínio separada da camada de acesso a dados.

Dessa forma não precisaremos referenciar a camada DAL na camada de apresentação.

Então vamos criar um novo projeto chamado Model em nossa solução e mover as classes da nossa lógica de domínio para este projeto.

Clique no menu FILE e a seguir em Add -> New Project;

Selecione a linguagem C# e o template Class Library e informe o nome Model. A seguir exclua o arquivo Class1.cs criado por padrão.

Para concluir vamos incluir uma referência do projeto Model no projeto DAL.

Clique com o botão direito do mouse sobre o projeto DAL e em Add Reference;

A seguir selecione a guia Solution e marca o projeto Model:

Na próxima parte do artigo iremos separar as classes das entidades do EDMX.

Lucas 8:20 E foi-lhe dito: Estão lá fora tua mãe e teus irmãos, que querem ver-te,
Lucas 8:21
Mas, respondendo ele (Jesus), disse-lhes: Minha mãe e meus irmãos são aqueles que ouvem a palavra de Deus e a executam.

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 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti