Banco de Dados

24 fev, 2015

Entity Framework 6: aplicação em camadas – Definindo o modelo e criando a solução

Publicidade

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ões 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, de negócios, de serviços, de entidades e 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) está fortemente acoplada às várias fontes de dados e também à camada de negócios. Isso resulta em dificuldades para testar a camada, 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. Ele 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:

  • Visual Studio 2013 Express for Windows Desktop
  • Entity Framework 6
  • Microsoft SQL Server 2012 Express

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

ef6_dalrp11

Empregados

ef6_dalrp12

Temos aqui um relacionamento “um-para-muitos” entre a tabela Departamentos e a tabela Empregados:

ef6_dalrp17

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, em seguida, 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 e selecione a guia Data e o template ADO .NET Entity Data Model, informe o nome Cadastro e clique no botão Add.

ef6_dalrp13

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

ef6_dalrp14

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

ef6_dalrp15

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

ef6_dalrp16

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:

ef6_dalrp18

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

ef6_dalrp19

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

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

  • Do contexto – Cadastro.Context.cs

  • Das entidades – Departamento.cs e Empregado.cs

Nossa próxima tarefa será separar as entidades Cadastro.cs, Departamento.cs e Empregado.cs do modelo de entidades – Cadastro.edmx. 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.

ef6_dalrp1a

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 marque o projeto Model:

ef6_dalrp1f

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